Каковы различия между -std = c ++ 11 и -std = gnu ++ 11?
Каковы различия между -std=c++11
и -std=gnu++11
качестве параметра компиляции для gcc и clang? Тот же вопрос с c99
и gnu99
? Я знаю о стандартах C ++ и C, это различия в параметрах, которые меня интересуют.
Я где-то читал, что это связано с некоторыми расширениями, но мне непонятно, какие из них и как выбрать один или другой для нового проекта.
- Как я могу умножить 64-битные операнды и получить 128-битный результат в переносимости?
- linux конвертировать время (для разных часовых поясов) в UTC
- Сведения о создании шаблона компиляторов GCC и MS
- Как установить GCC по частям с GMP, MPFR, MPC, ELF, без разделяемых библиотек?
- Являются ли переменные стека согласованными GCC __ атрибутом __ ((aligned (x)))?
- CMake: используйте собственный компоновщик
- Отладка против выпуска в CMAKE
- Ссылка на встроенные функции SSE
- Ошибка компиляции gcc на Raspberry Pi (Raspbian): make: *** error
- В чем разница между «asm», «__asm» и «__asm__»?
- Как установить путь выполнения (-rpath) исполняемого файла с помощью gcc в Mac OSX?
- Как указать новый путь GCC для CMake
- выровненный malloc () в GCC?
Как вы выяснили, разница между двумя параметрами заключается в том, включены ли расширения GNU, которые нарушают / расширяют стандарт C ++ или нет. Расширения GNU C ++ описаны здесь . Вы также можете использовать большинство расширений GNU C (описанных здесь ) в своих программах на C ++. Было бы также полезно прочитать о опции -Wpedantic
GCC здесь .
Обратите внимание, что некоторые расширения могут все еще действовать при использовании -std=c++11
, если они не противоречат стандарту. Например, при использовании компилятора MinGW мне нужны расширения для рабочего Boost.Lexical_Cast
. Но, пока вы не используете никого из них, вам лучше придерживаться стандарта без расширений для максимальной переносимости. Это может пригодиться, если вы вынуждены сменить компилятор.