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

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

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

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

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

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

Как мне сделать, чтобы minGW более-менее поддерживал стандарт, может какие-нибудь ключи подключить
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2010, 20:52
Ответы с готовыми решениями:

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

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

Mingw-w64 MinGW TDM-GCC
Всем привет. Хочу понять, существует ли принципиальная разница между Mingw-w64, MinGW и...

30
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
01.09.2010, 21:26
minGW - это gcc. По умолчанию работает со своими gnu-расширениями

Вот тут посмотри http://gcc.gnu.org/onlinedocs/... ct-Options
Возможно, что опции -ansi будет достаточно для отключения большинства Gnu-расширений. Можно ещё с -std= поиграть
1
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
01.09.2010, 22:18  [ТС]
попробовал использовать -ansi, выдает какие-то непонятные ошибки:

Код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using std::cout;
using std::endl;
 
int main()
{
  unsigned buf_size = 1024;
 
  int ia[buf_size];
  ia[0] = 10;
  cout << ia[0] << endl;
  return 0;
}
Параметры компиляции:
C:\MinGW\bin\g++ -c -ansi list1.cpp

Ошибки:
Миниатюры
Какому стандарту С++ соответствует minGW?  
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
01.09.2010, 22:31
Цитата Сообщение от TheAthlete Посмотреть сообщение
попробовал скомпилировать в Visual C++ 2010 Express Edition, она выдает ошибку: Нельзя массив инициализировать неконстантным выражением
Как мне сделать, чтобы minGW более-менее поддерживал стандарт, может какие-нибудь ключи подключить
спасибо поржал, массивы переменной длины в бейсике и с99
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
01.09.2010, 22:57
Цитата Сообщение от TheAthlete Посмотреть сообщение
попробовал использовать -ansi, выдает какие-то непонятные ошибки
Какая-то засада. В заголовках Си++ есть использование нестандартных функций Си. Надо будет на работе посмотреть. А в MinGW какая версия gcc? Это можно посмотреть приказом "gcc -v" (или "g++ -v")
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 07:43
Цитата Сообщение от TheAthlete Посмотреть сообщение
Как мне сделать, чтобы minGW более-менее поддерживал стандарт
minGW поддерживает стандарт лучше чем микрософтстудия. то, о чем вы говорите - расширения конторы gnu. они не являются нарушением стандарта. но добавляют некоторое удобство.

Цитата Сообщение от alex_x_x Посмотреть сообщение
спасибо поржал
над чем?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2010, 08:36
Цитата Сообщение от niXman Посмотреть сообщение
minGW поддерживает стандарт лучше чем микрософтстудия
Для полноты картины надо бы ещё и сказать, а куда нажать надо для этого. А то одни слова получаются
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 08:38
Цитата Сообщение от Evg Посмотреть сообщение
Для полноты картины надо бы ещё и сказать, а куда нажать надо для этого. А то одни слова получаются
я правда не знаю.
никогда не использовал автоматические массивы неконстантного размера.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
02.09.2010, 08:48
а куда нажать надо для этого
Опция -std
-std=
Determine the language standard. See Language Standards Supported by GCC, for details of these standard versions. This option is currently only supported when compiling C or C++.

The compiler can accept several base standards, such as `c89' or `c++98', and GNU dialects of those standards, such as `gnu89' or `gnu++98'. By specifying a base standard, the compiler will accept all programs following that standard and those using GNU extensions that do not contradict it. For example, `-std=c89' turns off certain features of GCC that are incompatible with ISO C90, such as the asm and typeof keywords, but not other GNU extensions that do not have a meaning in ISO C90, such as omitting the middle term of a ?: expression. On the other hand, by specifying a GNU dialect of a standard, all features the compiler support are enabled, even when those features change the meaning of the base standard and some strict-conforming programs may be rejected. The particular standard is used by -pedantic to identify which features are GNU extensions given that version of the standard. For example `-std=gnu89 -pedantic' would warn about C++ style `//' comments, while `-std=gnu99 -pedantic' would not.

A value for this option must be provided; possible values are

`c89'
`iso9899:1990'
Support all ISO C90 programs (certain GNU extensions that conflict with ISO C90 are disabled). Same as -ansi for C code.
`iso9899:199409'
ISO C90 as modified in amendment 1.
`c99'
`c9x'
`iso9899:1999'
`iso9899:199x'
ISO C99. Note that this standard is not yet fully supported; see http://gcc.gnu.org/gcc-4.4/c99status.html for more information. The names `c9x' and `iso9899:199x' are deprecated.
`gnu89'
GNU dialect of ISO C90 (including some C99 features). This is the default for C code.
`gnu99'
`gnu9x'
GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC, this will become the default. The name `gnu9x' is deprecated.
`c++98'
The 1998 ISO C++ standard plus amendments. Same as -ansi for C++ code.
`gnu++98'
GNU dialect of -std=c++98. This is the default for C++ code.
`c++0x'
The working draft of the upcoming ISO C++0x standard. This option enables experimental features that are likely to be included in C++0x. The working draft is constantly changing, and any feature that is enabled by this flag may be removed from future versions of GCC if it is not part of the C++0x standard.
`gnu++0x'
GNU dialect of -std=c++0x. This option enables experimental features that may be removed in future versions of GCC.



Добавлено через 1 минуту
По умолчанию для C: -std=gnu89
Для C++: -std=gnu++98
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2010, 08:51
А проблема не столько в опциях, сколько в инклюдах (судя по скриншоту).
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
02.09.2010, 09:31
Тут про поддержку стандарта C++0x в Visual Studio 2010
Поддержка частичная, да и стандарт еще не вышел
http://msdn.microsoft.com/ru-r... 36130.aspx

Добавлено через 2 минуты
А кто мешает написать в коде ?
const int buf_size = 1024;
Все равно ведь это константа.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
02.09.2010, 13:17
Вот такую лабуду
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main(){
    for ( int i = 0; i < 3; ++i ){
        int arr[i + 1], j;
        for ( j = 0; j < i + 1; ++j )
            arr[j] = j + 1;
        while ( j > 0 )
            printf("%d ", arr[--j]);
        printf("\n");
    }
    
    return 0;
}
по-всякому перепробовал компилировать - даже варнинга какого-нибудь не увидел...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2010, 15:02
Цитата Сообщение от odip Посмотреть сообщение
А кто мешает написать в коде ?
const int buf_size = 1024;
Все равно ведь это константа.
У человека проблема другого характера. Он не является специалистом по стандартам, а потому хочет иметь инструмент, при котором бы компилятор gcc ругался на gnu-расширения

Цитата Сообщение от easybudda Посмотреть сообщение
Вот такую лабуду
Насколько я понимаю - это linux'овый gcc современной версии (и современная glibc). А у minGW всё слишком старое

Добавлено через 5 минут
Попробовал на gcc-2.95.3 + glibc-2.2.4. На всём этом старье тоже работает. Видимо у minGW какие-то проблемы. Либо там не настоящие инклюды от glibc (да и сама glibc), а какая-то эмуляция виндузовая
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 15:29
Цитата Сообщение от Evg Посмотреть сообщение
А у minGW всё слишком старое
возможно у easybudda версия компилятора старая. cygwin не спешит обновляться.

Цитата Сообщение от Evg Посмотреть сообщение
Либо там не настоящие инклюды от glibc
мингв использует msvcrt вместо glibc.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
02.09.2010, 16:01
Цитата Сообщение от Evg Посмотреть сообщение
Насколько я понимаю - это linux'овый gcc современной версии (и современная glibc). А у minGW всё слишком старое
Вот сравнительно недавно скачал MinGW-5.1.6 с дремучим gcc компилятором - ругнулся только при -std=c++98 да и то не по делу:

Цитата Сообщение от niXman Посмотреть сообщение
возможно у easybudda версия компилятора старая. cygwin не спешит обновляться.
ну в общем да - там же на скрине 4.3.4. Так то, что к мингв прилагалось, ещё древнее - 3.4.5
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2010, 16:07
easybudda, проблема не в компиляторе, а в заголовочных файлах. Либо заголовки от gcc, либо от libc
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
02.09.2010, 16:29
проблема не в компиляторе, а в заголовочных файлах. Либо заголовки от gcc, либо от libc
Скорее проблема в ключе -ansi
При этом ключе отрубаются многие функции в заголовках
А у minGW всё слишком старое
Вот же блин специалист
C чего ты это взял ?
Code
1
2
3
4
5
6
7
8
9
> gcc -v
Using built-in specs.
Target: mingw32
Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,java,objc,obj-c++ --disable-sjlj-exceptions
 --enable-shared --enable-libgcj --enable-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enab
le-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build
=mingw32
Thread model: win32
gcc version 4.4.0 (GCC)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2010, 16:37
Цитата Сообщение от odip Посмотреть сообщение
Скорее проблема в ключе -ansi
При этом ключе отрубаются многие функции в заголовках
По опции -ansi взводится макрос (что-то типа STRICT_ANSI). По этому макросу что-то должно отключаться в glibc и что-то отключаться в инклюдах от gcc (которые цепляют инклюды от glibc). Тут скорее всего проблема именно с инклюдами от gcc, потому как идёт обращение к нестандартным функциям, но что да как и под каким макросом внутри настроено - хз. Теоретически в инклюдах от gcc могут использовать настроечный макрос от glibc. Так что вслепую сложно сказать, где именно проблема

Цитата Сообщение от odip Посмотреть сообщение
Вот же блин специалист
C чего ты это взял ?
Посмотри скриншот из поста #3. Там gcc-3.4.5
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.09.2010, 17:03
Цитата Сообщение от easybudda Посмотреть сообщение
MinGW-5.1.6
почему все качают этот инсталятор?! эта ветка давно заброшена.
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
02.09.2010, 17:46
http://www.mingw.org/wiki/Inst... TOforMinGW
Советую прочитать первый абзац пунтка Automated Installer. mingw-get и GUI инсталлятор лучше считать за одно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2010, 17:46
Помогаю со студенческими работами здесь

Может ли MinGW x64 компилить приложения x32? Или нужно для этого отдельно ещё MinGW х32 качать?
Просто решил поиграться с CodeLite.

Как заставить QTCreator при компиляции MinGW применять DLL от MinGW?
Как заставить QTCreator при компиляции MinGW применять DLL от MinGW? компилирую,с смотрю...

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

Вывести по введенному году, какому животному восточного календаря соответствует этот год
Вывести по введенному году, какому животному восточного календаря соответствует этот год. Годы...

С клавиатуры ввести число k (1.30). Определить, какому дню недели оно соответствует, если первое число – понедельник
С клавиатуры ввести число k (1.30). Определить, какому дню недели оно соответствует, если первое...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru