MS VS 2008 и C99

Я с интересом прочитал пост "Насколько универсально поддерживается C99?". В одном из комментариев говорится, что Microsoft не поддерживает C99. Но символ комментария // работает с VS 2008, и этот символ находится в C99. У меня есть два вопроса:

  1. Насколько VS 2008 поддерживает C99?

  2. Можно ли смешивать синтаксис C89 и C99 в одном и том же коде? Поэтому, если я напишу свой код на C89, а затем оставлю комментарий //. Это значит, что у меня смешанное кодирование. Так что же делает компилятор в таком случае? Проверьте мой код сначала с c89, а затем с C99, чтобы принять, что я использую // для комментариев?

1 ответ

Решение

MSVC очень мало поддерживает C99 в режиме C. Несколько вещей, которые он делает (например, комментарии "//"), на самом деле являются расширениями, которые они добавили в режим C90, которые исходят из C++, который может случиться и в C99. При компиляции кода C MSVC обрабатывает комментарии "//" как расширение C90, а не то, что вы смешиваете код C90 с кодом C99.

Вы получите "лучшую" поддержку C99, скомпилировав свои файлы C как C++ - таким образом, вы получите объявления, которые могут быть перемежены с операторами и объявлениями переменных в for заявления, которые относятся к for цикл, например.

Похоже, что Microsoft не заинтересована в добавлении поддержки C99 в MSVC - даже если они добавляют вещи из C99 в режим компилятора C++ (например, stdint.h добавляется в VS2010), поскольку некоторые дополнительные компоненты C99 добавляются в C++ в C++0x.

Другие вопросы по тегам