Соответствие стандартам Visual С++
Мне было интересно, соответствует ли компилятор Microsoft Visual С++ текущим стандартам C (C90/C99) и С++ (ISO/IEC 14882: 2003), и в какой степени. К сожалению, я только могу найти частичную информацию по этому вопросу, я могу смотреть на все неправильные места.
Любые указатели на связанные ресурсы высоко ценятся. Спасибо заранее.
Изменить:
Поскольку похоже, что это самый осязаемый вопрос, я был бы доволен ответом "да/нет" на то, соответствует ли MSVC полностью C90... Я пришел к пониманию, что это не так для C99 (естественно), и я до сих пор не имею понятия о С++..
Edit2:
Спасибо всем за их ответы. Я согласился с ответом г-на Рушакова, но поддержал все соответствующие ответы, которые были полезны.
Ответы
Ответ 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
во время компиляции).
Ответ 3
Вот хорошее резюме в блоге MSDN под названием "Возможности С++ 11 в Visual С++ 11" , который был обновлен 2 марта 2012 года.
Ответ 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 С++
и т.д.. когда мне действительно нужно выяснить, почему что-то не работает, как определено.