2010-01-23 14 views
6

Używam gcc 4.4.2 na Linuksiekompilacja z c89 i c99 czy gcc 4.4.2 jest domyślnie C99?

Zastanawiam się, czy gcc automatycznie domyślnie kompiluje się z c99 jako najnowszym standardem?

Jak mogę określić, czy chcę skompilować z C89 czy C99?

Wielkie dzięki za wszelkie rady,

+2

Domyślnie jest nadal gnu89 (tj C89 z rozszerzeniami GNU). –

Odpowiedz

9

Jednym z powodów, aby nie używać C99 domyślnie jest ponieważ standard ten nie jest w pełni wdrożony w kompilator jeszcze. Uważam jednak, że możesz ustawić tryb domyślny podczas kompilowania gcc, więc jeśli wybór standardów naprawdę ma dla ciebie znaczenie, lepiej zawsze przekazać tę opcję.

Dostępne opcje to: -std=c99 i -std=c89.

+0

Zazwyczaj kompiluję się z c89 jako bardziej przenośnym. Ale są pewne cechy c99, które lubię. Jednak nie mogę używać standardu c99, ponieważ muszę go skompilować w Windows przy użyciu VS, który obsługuje tylko c89. Nawet najnowsza wersja VS 2010 nie będzie implementować c89. – ant2009

+0

Jeśli sprawdzę [GCC C99status] (https://gc.gnu.org/c99status.html) nie mogę znaleźć żadnych brakujących funkcji, które mogłyby wpłynąć na większość przypadków użycia. Czy możesz podać przykład brakującej funkcji, która może blokować korzystanie z kompilacji C99? –

+0

@RuudAlthuizen Ta odpowiedź została napisana w 2010 roku. Od 2016 roku, zgodnie z moją wiedzą, brakuje tylko specjalistycznych aspektów zmiennoprzecinkowej. "Dostęp do środowiska zmiennopozycyjnego w " jest oznaczony jako "Funkcja biblioteki, nie jest wymagana obsługa kompilatora", ale w rzeczywistości to ** zdecydowanie ** wymaga wsparcia kompilatora, którego GCC nie zapewnia. –

9

Od strony gcc(1) człowieka:

-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. 
Powiązane problemy