В чем смысл стандарта 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.