Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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