2010-01-23 5 views
6

Я использую gcc 4.4.2 на linuxкомпиляция с c89 и c99 делает gcc 4.4.2 по умолчанию c99?

Мне просто интересно, gcc автоматически по умолчанию компилирует с c99 как свой последний стандарт?

Как я могу указать, хочу ли я скомпилировать с помощью c89 или c99?

Большое спасибо за любые советы,

+2

по умолчанию по-прежнему gnu89 (т.е. c89 с расширением GNU). –

ответ

9

Одной из причин не использовать C99 по умолчанию, потому что этот стандарт не в полной мере реализован в компиляторе еще. Тем не менее, я считаю, что вы можете установить режим по умолчанию при компиляции gcc, поэтому, если выбор стандартов действительно имеет значение для вас, лучше всегда передавать этот вариант.

Возможные варианты: -std=c99 и -std=c89 соответственно.

+0

Я обычно компилирую с c89 как более портативный. Но есть некоторые особенности c99, которые мне нравятся. Тем не менее, я не могу использовать стандарт c99, поскольку мне нужно скомпилировать на Windows с помощью VS, который поддерживает только c89. Даже последняя версия VS 2010 не будет внедрять c89. – ant2009

+0

Если я проверил [GCC C99status] (https://gcc.gnu.org/c99status.html), я не могу найти недостающие функции, которые повлияли бы на большинство случаев использования. Не могли бы вы привести пример отсутствующей функции, которая может блокировать использование компиляции C99? –

+0

@RuudAlthuizen Этот ответ был написан в 2010 году. По состоянию на 2016 год, насколько мне известно, отсутствуют только экспертные аспекты с плавающей запятой. «Доступ к среде с плавающей точкой в ​​» отмечен как «Функция библиотеки, не требуется поддержка компилятора», но на самом деле это ** определенно ** требует поддержки компилятора, которую GCC не предоставляет. –

9

На странице gcc(1) людей:

-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. 
Смежные вопросы