¿Cuáles son las diferencias entre -std=c++11
y -std=gnu++11
como parámetro de compilación para gcc y clang? La misma pregunta con c99
y gnu99
? Sé acerca de los estándares C ++ y C, son las diferencias en los parámetros que me interesan.
He leído en alguna parte que tiene que ver con algunas extensiones, pero no tengo claro cuáles y cómo elegir entre una u otra para un nuevo proyecto.
gnu
que se refieren a extensiones, y si desea escribir código portátil, debe apegarse a un estándar y evitar las extensiones por completo.Respuestas:
Como usted mismo descubrió, la diferencia entre las dos opciones es si las extensiones GNU que violan / extienden el estándar C ++ están habilitadas o no. Las extensiones GNU C ++ se describen aquí . También puede usar la mayoría de las extensiones GNU C (descritas aquí ) en sus programas C ++. También sería útil leer sobre la
-Wpedantic
opción GCC aquí .Tenga en cuenta que algunas extensiones aún pueden estar vigentes cuando se usan
-std=c++11
, siempre que no contradigan el estándar. Por ejemplo, cuando uso el compilador MinGW, necesito las extensiones para trabajarBoost.Lexical_Cast
. Pero, siempre que no use ninguno de ellos, es mejor que se adhiera al estándar sin extensiones para una portabilidad máxima. Esto puede ser útil si se ve obligado a cambiar el compilador.fuente
gnu11
pero no habilitadasc++11
? La lista a la que se vinculó es de todas las extensiones, y como usted mismo indica, algunas de ellas también están habilitadasc++11
(me gusta__restrict__
).