Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
1

какому стандарту С++ соответствует minGW

01.09.2010, 20:52. Показов 7097. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У меня возникла такая проблема: я сейчас изучаю С++ и компилирую программы с помощью компилятора minGW. В книге дошел до момента создания массивов (статических) и там говорится, что статические массивы можно инициализировать только константным выражением, а переменной нельзя инициализировать массив.

Вот в чем вопрос.
компилирую в minGW - он не ругается на использование переменных в качестве инициализации массивов

попробовал скомпилировать в Visual C++ 2010 Express Edition, она выдает ошибку: Нельзя массив инициализировать неконстантным выражением

Как мне сделать, чтобы minGW более-менее поддерживал стандарт, может какие-нибудь ключи подключить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2010, 20:52
Ответы с готовыми решениями:

Соответствует ли код стандарту?
Привет! Имеется следующий код (в очень урощенном виде) struct foo {}; int main() { struct...

Соответствует ли это стандарту С?
В Visual Studio и в CodeBlocks такой код компилируется с предупреждением. #include <stdio.h>...

насколько это соответствует стандарту?
#include <iostream> class shit { private: int x; public: shit(){} shit(int p)...

Какова вероятность того, что устройство соответствует стандарту?
На заводе 95% аппаратуры выдерживает испытание. Из прошедших испытание устройств 97% соответствует...

30
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 18:43 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Евгений М. Посмотреть сообщение
http://www.mingw.org/wiki/Inst... TOforMinGW
Советую прочитать первый абзац пунтка Automated Installer. mingw-get и GUI инсталлятор лучше считать за одно.
скажите, а вы сами то чем пользуетесь?
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
02.09.2010, 18:51 22
Цитата Сообщение от niXman Посмотреть сообщение
скажите, а вы сами то чем пользуетесь?
gcc 4.5.0 (MinGW)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
02.09.2010, 20:36 23
Цитата Сообщение от niXman Посмотреть сообщение
почему все качают этот инсталятор?! эта ветка давно заброшена.
а он по ссылке первый в списке и закачек его больше, чем остальных
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 20:39 24
была однажды ситуация.. уже и не вспомню.. но поклялся тогда не юзать офф сборки. с тех пор только TDM`овские или свои.
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
03.09.2010, 14:14  [ТС] 25
Спасибо всем за ответы!

использую gcc 4.4.0, кстати качал тоже mingw 5.1.6

Цитата Сообщение от niXman Посмотреть сообщение
minGW поддерживает стандарт лучше чем микрософтстудия. то, о чем вы говорите - расширения конторы gnu. они не являются нарушением стандарта. но добавляют некоторое удобство.
подскажите пожалуйста, что это за расширения и где про них можно почитать, я посмотрел в спецификации стандарта http://www.kuzbass.ru:8086/doc... #dcl.array, там написано, что массив необходимо инициализировать константным выражением (constant-expression):

D1 [constant-expression]

спасибо, niXman, попробовал TDM сборку, с -ansi скомпилировалось,
но все равно позволяет создавать массивы с неконстантными значениями

еще раз спасибо всем, буду дальше разбираться с c++, mingw, gcc и в дальнейшем с qt
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.09.2010, 14:23 26
Цитата Сообщение от TheAthlete Посмотреть сообщение
подскажите пожалуйста, что это за расширения и где про них можно почитать
http://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/
Разделы 5 и 6
Конкретно твой случай - глава 5.16
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
03.09.2010, 16:10 27
Цитата Сообщение от niXman Посмотреть сообщение
с тех пор только TDM`овские
Поддерживаю, TDM замечательнейшая вещь.
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
19.04.2011, 18:27  [ТС] 28
Привет всем!

Наконец-то нашел решение проблемы, которую хотел решить. Действительно, как выше говорилось, массивы переменной длины - это расширение GNU языка C. Там есть множество других расширений, но самое главное:

чтобы их отключить и тем самым компилировать код, который будет поддерживаться несколькими компиляторами необходимо использовать ключ -pedantic, теперь будет использоваться только ISO C++ и на все расширения GNU C и GNU C++ будут выдаваться ошибки

компилировать данную программу теперь можно следующим способом:
mingw32-g++ -pedantic main.cpp -o main

либо

g++ -pedantic main.cpp -o main

В результате вылетает следующая ошибка (что и требовалось доказать):
Миниатюры
какому стандарту С++ соответствует minGW  
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
19.04.2011, 18:36 29
Цитата Сообщение от TheAthlete Посмотреть сообщение
теперь будет использоваться только ISO C++ и на все расширения GNU C и GNU C++ будут выдаваться ошибки
Все расширения в gcc не отключаются в принципе (видимо, политика у них такая). Например, такой тест:

C
1
2
3
4
void func (void)
{
  __asm__ __volatile__ ("" : : : "cc");
}
У тебя будет компилироваться хоть с -ansi, хоть с -pedantic, хоть с -std=c89
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
19.04.2011, 18:53  [ТС] 30
Действительно работает.

я так понял __asm__, __volatile__ - альтернативные формы ключевых слов GNU C
только не понятно что делает ("" : : : "cc")
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
19.04.2011, 19:49 31
Цитата Сообщение от TheAthlete Посмотреть сообщение
я так понял __asm__, __volatile__ - альтернативные формы ключевых слов GNU C
Такие хрени с двумя подчерками понимаются всегда (даже в вариантах с типа якобы отключенными расширениями). Делается это для того, чтобы можно из было помешать в библиотечные инклюды, а приложения компилировать с опциями -ansi, -pedantic. Т.е. твоё приложение как бы без расширений, но те расширения, которые лезут из библиотек, такому режиму не мешают. Если посмотреть в инклюды типа /usr/include/bits/string2.h (напамять пишу, могу и ошибиться), то видно, что для многих стандартных функций сделаны реализации в виде ассемблерных вставок

Цитата Сообщение от TheAthlete Посмотреть сообщение
только не понятно что делает ("" : : : "cc")
Пустая ассемблерная вставка
0
19.04.2011, 19:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2011, 19:49
Помогаю со студенческими работами здесь

Какому разрешению соответствует плёночная мыльница?
Привет ☺ Плёночный фотоаппарат автомат с одной кнопкой. Какое эффективное разрешение снимка можно...

Какому типу переменной соответствует HANDLE?
Доброго времени суток! Разбирал чужой код и возник вопрос. В коде как я понял использовалось WIN...

AMD Athlon II X2 240 (2.8 разгон до 3.0) какому из Intel'ов он соответствует
Скажите пожалуиста процессор AMD Athlon II X2 240 (2.8 разгон до 3.0) какому из Intel'ов он...

Какому логическому элементу соответствует приведённая на рисунке ключевая модель
Какому логическому элементу соответствует приведённая на рисунке ключевая модель с двумя входами А...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru