Почему GCC не компилирует C99 по умолчанию? Я имею в виду, почему необходимо добавлять флаг --std=c99 каждый раз, когда пишется код на C99?
C99 не C-версия по умолчанию для GCC?
Ответы (4)
Изменить. Начиная с GCC 5 по умолчанию используется -std=gnu11
. См. раздел Перенос на GCC 5.
См. Параметры диалекта C, gnu89
по умолчанию.
`gnu89'
Диалект GNU ISO C90 (включая некоторые функции C99). Это значение по умолчанию для кода C.
Как уже упоминалось @tsv, ISO C99 еще не полностью поддерживается:
`c99'
`c9x'
`iso9899:1999'
`iso9899:199x'ИСО С99. Обратите внимание, что этот стандарт еще не полностью поддерживается; см. 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.