Я немного озадачен, читая это: Электронное руководство Gcc 4.5 --- Стандарты раздел .
Они объясняют это
Первоначальный стандарт ISO C ++ был опубликован как стандарт ISO (ISO / IEC 14882: 1998) и дополнен Техническими исправлениями, опубликованными в 2003 году (ISO / IEC 14882: 2003) , Эти стандарты называются C ++ 98 и C ++ 03 соответственно. GCC реализует большую часть C ++ 98 (экспорт является заметным исключением) и большинство изменений в C ++ 03.
Но они не Не говорите, поддерживает ли gcc «голый» 98 C ++ или только исправленный C ++ 03. В разделе «Язык C» объяснение более ясное:
Ошибки в стандарте ISO C 1999 года были исправлены в трех Технических исправлениях, опубликованных в 2001, 2004 и 2007 годах. GCC не поддерживает исправленную версию.
Итак, мой вопрос: это также относится и к g ++ (без поддержки нескорректированного стандарта)?
Тогда единственными 4 вариантами выбора стандарта g ++ являются -std = c ++ 98
, -std = gnu ++ 98
, -std = c ++ 0x
и -std = gnu ++ 0x
. Это правильно?
И последний подвопрос: Что тогда является опцией -ansi
? Он используется только в режиме C?
Редактировать:
-ansi Синоним -std = c89 (для C) или -std = c ++ 98
gcc не поддерживает неисправленный стандарт, он стремится (хотя и не достигает 100%) соответствия C++03. Технически существует только один текущий стандарт C++, и это версия, включающая TC1. Как говорится, "поддерживает большинство изменений в C++03. Чтобы выбрать этот стандарт... используйте один из вариантов -ansi
или -std=c++98
" .
Нет поддержки или возможности выбрать устаревшую неисправленную версию стандарта 1998 года.
По крайней мере, насколько я знаю, нет способа «отключить» поддержку (любой из) новых функций C++03.
-ansi
распознается внешним интерфейсом C. Чтобы узнать больше о том, какие компоненты распознают какие переключатели, вы можете использовать g++ -v --help
(это дает много вывода, поэтому вы обычно хотите направить его в less
или что-то в этом роде. по этому заказу).