C99 не является c - версией по умолчанию для GCC?

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

4 ответов


Edit: по состоянию на GCC 5,-std=gnu11 по умолчанию. См.перенос в GCC 5.


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

`gnu89'

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

Как упоминалось в @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" устарело.


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

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


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

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


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

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