C99 не по умолчанию C-версия для GCC? - PullRequest
11 голосов
/ 21 февраля 2011

Почему GCC не компилирует C99 по умолчанию?Я имею в виду, почему необходимо добавлять флаг --std = c99 каждый раз, когда код написан на C99?

Ответы [ 4 ]

10 голосов
/ 21 февраля 2011

Возможно, потому что он все еще не полностью реализован - см. C99 status .

Можно также утверждать, что функции C99 не получили широкого распространения, хотя это что-то вроде циклического аргумента.

10 голосов
/ 26 февраля 2011

Используйте команду c99 для компиляции программ на языке C.

Текущий стандарт POSIX определяет команду c99, поэтому она должна быть доступна в большинстве Unix-подобных систем.

10 голосов
/ 21 февраля 2011

Редактировать: Начиная с GCC 5, -std=gnu11 является значением по умолчанию. См. Портирование на GCC 5 .


См. Параметры диалекта C , gnu89 по умолчанию.

`gnu89'

GNU диалект ISO C90 (включая некоторые Особенности С99). Это по умолчанию для С-код.

Как уже упоминалось @tsv, ISO C99 еще не полностью поддерживается:

`c99'
`C9x '
`Iso9899: 1999'
`iso9899: 199x '

ISO C99. Обратите внимание, что этот стандарт еще не полностью поддерживается; см. http://gcc.gnu.org/c99status.html для получения дополнительной информации. Имена `c9x 'и` iso9899: 199x' устарели.

А также:

`gnu99'
`Gnu9x '

GNU диалект ISO C99. Когда ISO C99 полностью внедрен в GCC, это станет значением по умолчанию. Имя `gnu9x 'устарело.

2 голосов
/ 11 марта 2015

Причина в том, что конфигурации gcc по умолчанию изменяются очень долго, так как каждый раз, когда конфигурация по умолчанию изменяется, она может потенциально нарушить компиляцию допустимых программ (в этом случае действительные программы c89, которые недействительны в c99).Начиная с gcc 5.0, стандартом C по умолчанию, используемым gcc, будет gnu11, то есть c11 с расширениями gnu (см. здесь ):

Режим по умолчанию для C теперь -std = gnu11 вместо -std = gnu89.

...