2010-01-23 9 views
6

Estoy usando gcc 4.4.2 en linuxcompilando con c89 y c99 ¿gcc 4.4.2 está por defecto en c99?

Me pregunto si gcc automáticamente se compila automáticamente con c99 ya que es el último estándar?

¿Cómo puedo especificar si quiero compilar con c89 o c99?

Muchas gracias por cualquier consejo,

+2

El valor por defecto es todavía gnu89 (es decir, C89 con extensiones de GNU). –

Respuesta

9

Una razón para no usar C99 por defecto se debe a que esta norma no se aplica plenamente en el compilador todavía. Sin embargo, creo que puede establecer el modo predeterminado al compilar gcc, por lo que si la elección de los estándares realmente es importante para usted, siempre es mejor pasar la opción.

Las opciones son -std=c99 y -std=c89 respectivamente.

+0

Normalmente compilo con c89 ya que es más portátil. Pero hay algunas características de c99 que me gustan. Sin embargo, no puedo usar el estándar c99 ya que necesito compilar en Windows usando VS, que solo es compatible con c89. Incluso la última versión de VS 2010 no implementará c89. – ant2009

+0

Si reviso [GCC C99status] (https://gcc.gnu.org/c99status.html) no puedo encontrar ninguna característica faltante que pueda afectar la mayoría de los casos de uso. ¿Podría dar un ejemplo de una característica faltante que podría estar bloqueando el uso de la compilación C99? –

+0

@RuudAlthuizen Esa respuesta se escribió en 2010. A partir de 2016, a mi leal saber y entender, solo faltan aspectos expertos de coma flotante. El "acceso al entorno de punto flotante en " está marcado como "función de biblioteca, no se requiere compatibilidad con el compilador", pero en realidad esto ** definitivamente ** requiere compatibilidad con el compilador, que GCC no proporciona. –

9

Desde la página gcc(1) hombre:

-std= 
     Determine the language standard. This option is currently only 
     supported when compiling C or C++. 

.... 

     c99 
     c9x 
     iso9899:1999 
     iso9899:199x 
      ISO C99. Note that this standard is not yet fully supported; 
      see <http://gcc.gnu.org/gcc-4.4/c99status.html> for more 
      information. The names c9x and iso9899:199x are deprecated. 

     gnu89 
      GNU dialect of ISO C90 (including some C99 features). This is 
      the default for C code. 

     gnu99 
     gnu9x 
      GNU dialect of ISO C99. When ISO C99 is fully implemented in 
      GCC, this will become the default. The name gnu9x is 
      deprecated. 
Cuestiones relacionadas