Каковы различия между-std=c++11 и-std=gnu++11?

каковы различия между -std=c++11 и -std=gnu++11 как параметр компиляции для gcc и clang? Тот же вопрос c99 и gnu99? Я знаю о стандартах C++ и C, меня интересуют различия в параметрах.

Я где-то читал, что это связано с некоторыми расширениями, но мне непонятно, какие из них и как выбирать между одним или другим для нового проекта.

1 ответов


как вы сами выяснили, разница между этими двумя вариантами заключается в том, включены ли расширения GNU, которые нарушают/расширяют стандарт C++, или нет. Расширения GNU C++ описаны здесь. Вы также можете использовать большинство расширений GNU C (описано здесь) в ваших программах на C++. Было бы также полезно прочитать о -Wpedantic опция GCC здесь.

обратите внимание, что некоторые расширения все еще могут быть в силе при использовании -std=c++11, пока они не противоречат стандарту. Например, при использовании компилятора MinGW, мне нужны расширения для работающего Boost.Lexical_Cast. Но, пока вы не используете ни один из них, вам лучше придерживаться стандарта без расширений для максимальной переносимости. Это может пригодиться, если вы окажетесь вынуждены менять компилятор.