В чем смысл стандарта C99?

C99 добавляет несколько полезных функций для языка, но мне трудно рекомендовать любую практику, которая зависит от C99. Причина этого в том, что в действительности существует несколько (каких-либо?) Реализаций языка C99. Конечно, ограниченная поддержка в нескольких компиляторах, но никто не хочет тратить время на то, чтобы написать код C только для того, чтобы он был неспособен.

Это расстраивает, учитывая, что стандарт был написан и завершен более 10 лет назад. Плюс я время от времени слышу обсуждения C1x, и мне интересно, почему кто-то будет предпринимать шаги для пересмотра языка, учитывая, что текущая версия языка еще не реализована.

Итак, мой вопрос в том, как сегодня называет программист C программистом, что полезно w.r.t. стандарт C99 для меня (если есть)?

Ответы

Ответ 1

MSVC не поддерживает и никогда не будет поддерживать C99. Но у Microsoft мало стимулов для обновления своего компилятора C. Это не похоже, что они потеряют много дел над этим.

Но есть много компиляторов, которые поддерживают C99.

http://en.wikipedia.org/wiki/C99#Implementations

Что касается gcc:

http://gcc.gnu.org/c99status.html

Вы правы, что, возможно, C99 не полезен для кода библиотеки (и, возможно, никогда не будет без поддержки Microsoft), но если вы работаете над собственным или личным проектом, в котором вы можете выбрать компиляторы и инструменты, мобильность не является большой проблемой.

Ответ 2

C99 содержит функции, которые действительно упрощают и упрощают программирование на C:

  • назначенные инициализаторы
  • составные литералы
  • for -scope variables
  • фиксированные ширины целых типов

Язык также гораздо более выразителен с помощью

  • переменные макросы
  • inline функции

На моей машине linux у меня есть четыре компилятора, которые поддерживают C99 в удовлетворительной степени, что делает это пригодным для использования на ежедневной основе: gcc, clang, opencc и icc.

Первые два являются компиляторами с открытым исходным кодом, где clang пытается использовать код, совместимый с gcc (что означает, что поддержка C99 примерно такая же).

Позже два из двух основных производителей процессоров являются коммерческими, но с широкой лицензией для некоммерческих пользователей. Их C99 немного меньше, в частности их поддержка inline кажется не полностью совместимой со стандартом.

Ответ 3

Что касается C1x, я считаю, что стоит отметить, что комитет по стандартам хорошо знает, что C99 не был широко принят и не хочет повторять те же ошибки (или ухудшить ситуацию). Из C1x charter:

В отличие от C9X, консенсус на лондонской встрече состоял в том, что не должно быть никаких изобретение, без исключения. Только те функции, которые имеют историю и являются общими использование коммерческой реализации должно быть рассмотрено. Также необходимо проявлять осторожность стандартизировать эти функции таким образом, чтобы сделать Стандарт и коммерческую совместимость по осуществлению.

и

Оригинальный стандарт имел очень позитивный прием от пользователя и поставщика сообщества. Однако C99 был не так широко принят.

Ответ 4

Вы должны использовать C99, если вы не заблокированы в среде, которая не поддерживает C99 (особенно встраиваемые системы).

И да, если вы знаете, что ваша библиотека будет использоваться людьми, использующими MSVC, вы не можете использовать функции C99 в интерфейсах, но нет причин не использовать C99 в реализации (кроме функции библиотеки зависимости, конечно).

Оригинальный ответ: "Какие компиляторы не поддерживают C99? Plus, когда вы переходите от компиляторов к инструментам, C99 на самом деле чаще поддерживается C89."

Ответ 5

Если вы заботитесь о производительности, нет пути вокруг restrict.

Ответ 6

FreeBSD теперь использует Clang для компиляции ядра и почти поддерживает C99.