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