2010-01-23 12 views
6

Ich benutze gcc 4.4.2 auf linuxKompilieren mit c89 und c99 gcc 4.4.2 standardmäßig auf c99?

Ich frage mich nur, gcc automatisch standardmäßig kompilieren mit c99 als der neueste Standard?

Wie kann ich angeben, ob ich mit c89 oder c99 kompilieren möchte?

Vielen Dank für jede Beratung,

+2

Der Standardwert ist gnu89 noch (das heißt c89 mit GNU-Erweiterungen). –

Antwort

9

Ein Grund C99 standardmäßig nicht zu verwenden, da dieser Standard nicht vollständig in dem Compiler noch implementiert. Ich glaube jedoch, dass Sie den Standardmodus beim Kompilieren von gcc festlegen können. Wenn die Auswahl der Standards für Sie wirklich wichtig ist, ist es besser, die Option immer zu übergeben.

Die Optionen sind -std=c99 bzw. -std=c89.

+0

Normalerweise kompiliere ich mit c89 als portabler. Aber es gibt einige Eigenschaften von c99, die ich mag. Allerdings kann ich den c99-Standard nicht verwenden, da ich mit VS, das nur c89 unterstützt, kompilieren muss. Selbst die neueste Version von VS 2010 wird c89 nicht implementieren. – ant2009

+0

Wenn ich [GCC C99status] (https://gcc.gnu.org/c99status.html) überprüfe, kann ich keine fehlenden Features finden, die die meisten Anwendungsfälle betreffen würden. Können Sie ein Beispiel für ein fehlendes Feature nennen, das blockiert werden könnte, um die C99-Kompilierung zu verwenden? –

+0

@RuudAlthuizen Diese Antwort wurde 2010 geschrieben. Ab 2016 fehlen meines Wissens nach nur Expertenaspekte von Gleitkommazahlen. "Fließkommaumgebungszugriff in " wird als "Bibliotheksfeature, keine Compilerunterstützung erforderlich" markiert, aber tatsächlich erfordert diese ** definitiv ** Compilerunterstützung, die GCC nicht bereitstellt. –

9

Vom gcc(1) Manpage:

-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.