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