Почему GCC не компилирует C99 по умолчанию? Я имею в виду, почему необходимо добавить флаг --std = c99 каждый раз записывается код на C99?
C99 не по умолчанию C-версия для GCC?
Ответ 1
Изменить: По состоянию на GCC 5, -std=gnu11
является значением по умолчанию. См. Портирование на GCC 5.
См. C Параметры диалога, gnu89
по умолчанию.
`gnu89
Диалог GNU по ISO C90 (включая некоторые C99). Это значение по умолчанию для 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 'устарело.
Ответ 2
Возможно, потому, что он все еще не полностью реализован - см. статус C99.
Также можно утверждать, что функции C99 не получили широкого распространения, хотя это что-то вроде кругового аргумента.
Ответ 3
Используйте команду c99
для компиляции программ на C.
В текущем стандарте POSIX указывается команда c99
, поэтому она должна быть доступна в большинстве Unix-подобных систем.
Ответ 4
Причина в том, что конфигурации gcc по умолчанию требуют очень долгого времени, так как каждый раз, когда конфигурация по умолчанию изменяется, она может потенциально нарушить компиляцию допустимых программ (в этом случае допустимые c89-программы, которые недействительны в c99). Начиная с gcc 5.0, стандартом C по умолчанию, используемым gcc, будет gnu11, который является c11 с расширениями gnu (см. здесь):
Режим по умолчанию для C теперь -std = gnu11 вместо -std = gnu89.