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

Я использую gcc 4.4.2 в Linux

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

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

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


person ant2009    schedule 23.01.2010    source источник
comment
По умолчанию по-прежнему используется gnu89 (т.е. c89 с расширениями GNU).   -  person R Samuel Klatchko    schedule 23.01.2010


Ответы (2)


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

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

person Pascal Cuoq    schedule 23.01.2010
comment
Обычно я компилирую c89, поскольку он более переносимый. Но в c99 есть некоторые особенности, которые мне нравятся. Однако я не могу использовать стандарт c99, так как мне нужно компилировать в Windows с помощью VS, который поддерживает только c89. Даже последняя версия VS 2010 не будет реализовывать c89. - person ant2009; 23.01.2010
comment
Если я проверю GCC C99status, я не найду каких-либо недостающих функций, которые могут повлиять на большинство вариантов использования. Не могли бы вы привести пример отсутствующей функции, которая может блокировать использование компиляции C99? - person Ruud Althuizen; 11.05.2016
comment
@RuudAlthuizen Этот ответ был написан в 2010 году. По состоянию на 2016 год, насколько мне известно, отсутствуют только экспертные аспекты с плавающей запятой. «Доступ к среде с плавающей запятой в‹ fenv.h ›» помечен как «Функция библиотеки, поддержка компилятора не требуется», но на самом деле для этого определенно требуется поддержка компилятора, которую GCC не предоставляет. - person Pascal Cuoq; 11.05.2016
comment
@PascalCuoq Я заметил отметку времени. Я добавил комментарий, потому что в вопросе конкретно упоминается GCC 4.4.2, что не имеет значения для статуса поддержки. - person Ruud Althuizen; 11.05.2016

На странице руководства 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.
person Ignacio Vazquez-Abrams    schedule 23.01.2010