Подтвердить что ты не робот

Соответствие стандартам Visual С++

Мне было интересно, соответствует ли компилятор Microsoft Visual С++ текущим стандартам C (C90/C99) и С++ (ISO/IEC 14882: 2003), и в какой степени. К сожалению, я только могу найти частичную информацию по этому вопросу, я могу смотреть на все неправильные места.

Любые указатели на связанные ресурсы высоко ценятся. Спасибо заранее.

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

Edit2: Спасибо всем за их ответы. Я согласился с ответом г-на Рушакова, но поддержал все соответствующие ответы, которые были полезны.

4b9b3361

Ответ 1

Возможно, Страница нестандартного поведения MSDN для Visual С++ просветит вас? Убедитесь, что вы посмотрите на интересующую вас версию (поле с правой стороны).

Поскольку ссылки MSDN все время меняются (и кто знает, почему), здесь основное содержимое со страницы на VS2008, поэтому, когда связь ломается, и кто-то сталкивается с этим ответом, они могут Google и найти правильную страницу:

Нестандартное поведение

Ниже перечислены некоторые из Известные места, где Visual С++ реализация С++ не согласна со стандартом С++. Секция номера относятся к номерам разделов в стандарт С++.

Ответ 2

Мое домашнее животное задумывается над тем, что большинство программистов считают несущественным, но я лично считаю, что он сильно затрудняет читаемость, заключается в том, что VС++ не может скомпилировать следующий код на С++:

bool result = true and not false;

... потому что VС++ не распознает and, or и not (вместе с остальной частью ISO 646) как действительные токены.

Разъяснение. В стандарте упоминается обработка вышеуказанных токенов в п. 2.2.12, отмечается в них как зарезервировано в п. 2.2.11 и определяет для них эквивалентное отображение в п. 2.5 к более условным представлениям операторов (например, and соответствует &&). Не ясно, почему они получают особый статус рядом с другими ключевыми словами. Еще более смутно, приложение C2.2 неожиданно называет их "ключевыми словами". Тем не менее, стандарт абсолютно ясен в отношении их лечения и семантики. VC просто не реализует эти абзацы (если вы не укажете флаг /Za во время компиляции).

Ответ 4

Visual С++ 2k3, 2k5 и 2k8, соответствуют C89 и С++ 98.

Некоторые дополнительные функции выбраны из C99, а на С++ 98 есть несколько улучшений.

Ответ 5

Я еще не использую VS 2008, поэтому могу говорить только за VS 2005.

Он не поддерживает C99. Поддержка C89/90 всегда была хорошей в VC, и я не знаю о каких-либо проблемах несоблюдения.

Поддержка С++ 98 имеет ряд проблем, некоторые из них документируются MS как известные проблемы, а некоторые - простые ошибки. Я сделал запись в блоге для использования в качестве "ноутбука" для различных ошибок VS 2005 С++, с которыми я сталкиваюсь на практике. Если вы хотите, вы можете посмотреть здесь, хотя этот список, вероятно, далеко не полный

Ответ 6

__ try помечен как расширение

Ответ 7

Соответствие стандартам для C и С++ было довольно неудовлетворительным для VS. С 2005 года ситуация начала меняться и становится все лучше. VS2010 - это то, на что я действительно смотрю, с большим количеством функций от С++ 0x. Однако большую часть времени я вхожу в Googling со следующими ключевыми словами:

  • msdn Соответствие ANSI C
  • msdn Соответствие ISO С++

и т.д.. когда мне действительно нужно выяснить, почему что-то не работает, как определено.