Каковы различия между -std=c++11
и в -std=gnu++11
качестве параметра компиляции для GCC и звона? Тот же вопрос с c99
и gnu99
? Я знаю о стандартах C ++ и C, меня интересуют различия в параметрах.
Я где-то читал, что это связано с некоторыми расширениями, но мне непонятно, какие из них и как выбрать между тем или другим для нового проекта.
gnu
действительно относятся к расширениям, и если вы хотите написать переносимый код, вам следует придерживаться стандарта и вообще избегать расширений.Ответы:
Как вы сами выяснили, разница между двумя вариантами заключается в том, включены ли расширения GNU, которые нарушают / расширяют стандарт C ++, или нет. Расширения GNU C ++ описаны здесь . Вы также можете использовать большинство расширений GNU C (описанных здесь ) в своих программах на C ++. Было бы также полезно прочитать о
-Wpedantic
опции GCC здесь .Обратите внимание, что некоторые расширения могут действовать при использовании
-std=c++11
, если они не противоречат стандарту. Например, при использовании компилятора MinGW мне нужны расширения для рабочегоBoost.Lexical_Cast
. Но пока вы не используете ни один из них, вам лучше придерживаться стандарта без расширений для максимальной переносимости. Это может пригодиться, если вам придется сменить компилятор.источник
gnu11
но не включеныc++11
? Список, на который вы ссылаетесь, содержит все расширения, и, как вы сами указываете, некоторые из них также включеныc++11
(например,__restrict__
).