2013-07-31 1 views
0

Прошло более десяти лет с тех пор, как был опубликован C99. Однако до сих пор было мало, если таковые имеются, компиляторов, которые поддерживают все новые функции C99. Зачем?Почему нет компиляторов, которые соответствуют C99?

ОТВЕТ: Есть ли на самом деле компиляторы, которые полностью соответствуют C99?

+2

IME, большинство основных компиляторов C поддерживают большинство C99. Просто Microsoft отказывается его поддерживать. –

+1

Полная поддержка очень трудно найти. C11, возможно, повезло больше, он не одобрял некоторые противоречивые функции C99 от обязательного до факультативного. Хотя вам придется задаться вопросом, что может быть точкой дополнительной функции в языковом стандарте, и тем не менее вы не можете рассчитывать, когда важна переносимость. –

ответ

2

Согласно Wikipedia: C99 Implementations, самые популярные компиляторы (кроме Visual Studio) имеют поддержку большинства, но не всех функций C99 (например, gcc или clang), но, да, некоторые компиляторы уже полностью соответствуют C99.

Я думаю, что одна из причин заключается в том, что некоторые функции C99 не полезны для некоторых поставщиков компиляторов. Новейший стандарт C11, с другой стороны, позволяет реализациям не поддерживать определенные части стандарта, включая некоторые, которые были обязательными для поддержки на C99, например, сложные типы и массивы переменной длины. (См C11 §6.10.8.3 условных функций макросов)

+2

Это, безусловно, не вопрос «трудно реализовать». Некоторые производители компиляторов (особенно Microsoft) просто не хотят этого по политическим причинам. –

+0

@JensGustedt Я изменил свои слова, когда говорил aoubt C99, я по умолчанию игнорировал Micorsoft. Кстати, кажется, что Micosoft ** наконец-то решила добавить некоторые функции C99 в Visual Studio 2013. http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11- 14-stl-features-fixes-and-break-changes-in-vs-2013.aspx –

0

BTW: Есть ли действительно какие-компиляторы, которые полностью соответствуют C99?

Два основных компилятора общественного домена clang и gcc находятся на расстоянии, насколько можно получить. Там могут быть некоторые небольшие проблемы, которые остаются в библиотеке C, но библиотека C обычно представляет собой другой проект от компиляторов.

clang имеет C99 по умолчанию и движется относительно быстро к C11.

gcc с флагом -std=c99 подходит для любых практических целей.

+0

Не поддерживает ли Intel C99? –

+0

И HP, и IBM требуют полной поддержки, iirc. –

Смежные вопросы