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

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


person smilingbuddha    schedule 20.02.2011    source источник


Ответы (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' устарело.

person Gregory Pakosz    schedule 20.02.2011
comment
gcc5 будет использовать gnu11 как версию по умолчанию. - person Étienne; 11.03.2015

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

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

person tsvallender    schedule 20.02.2011

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

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

person Jukka Suomela    schedule 26.02.2011

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

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

person Étienne    schedule 11.03.2015