我在想,如果,和到什么程度,是否微软的Visual C ++编译器符合当前C(C90 / C99)和C ++(ISO / IEC 14882:2003)标准。 不幸的是,我只能够找到关于这个问题,我看到的可能是错误的地方的部分信息。
到相关资源的任何指针赞赏。 提前致谢。
编辑:既然是看起来这是一个最敏感的问题,我会满足于一个是/ MSVC上是否完全符合C90没有答案......我来理解,这不是对C99的情况下(自然),我仍然没有关于C ++的线索..
EDIT2:谢谢大家的答案。 我已经接受Rushakov先生的回答,但upvoted所有相关的答案,这都是有帮助的。
也许MSDN的非标准行为页的Visual C ++会启发你? 请确保你看看你最感兴趣的(在右侧框)的版本。
由于MSDN的链接更改所有的时间(谁知道为什么),这里是从VS2008页面的主要内容,所以当链路中断,有人遇到这样的回答,他们可以谷歌和找到正确的页面:
非标准行为
以下主题是已知的一些地方,在Visual C ++实现C ++的不与C ++标准一致的。 该部分的数字表示各部分的编号在C ++标准。
- 编译器限制
- 10.3(第5段)共变返回类型
- 14模板出口关键字
- 14.6.2从属名称
- 15.4函数异常说明符
- 16.3.2#操作
- 21.1.1性格特征要求
- 对象的存储位置
我的眼中钉,大部分程序员觉得不重要,但我个人觉得伤害可读性很多,是VC ++无法编译下面的C ++代码:
bool result = true and not false;
......因为VC ++不识别and
, or
并not
作为有效的令牌(符合ISO 646的其余部分一起)。
澄清 :标准提到上述令牌的治疗中§2.12,如在§2.11保留和在§2.5限定为他们更常规操作者的表示的等价映射(例如将其标记and
对应于&&
)。 为什么他们让旁边的其他关键字一个特殊的地位目前尚不清楚。 更令人混淆,附录C2.2突然称他们为“关键字”。 不过,标准是他们的待遇和语义绝对清晰。 VC根本没有实现这些段落(除非指定/Za
编译时标志)。
下面是在一个很好的总结MSDN博客 “ 在Visual C ++ 11 C ++ 11功能 ”这是更新2012年3月2日标题。
视觉C ++ 2K3,2K5,2K8和,顺应C89和C ++ 98。
一些额外的功能是樱桃采摘从C99,并有上的C ++ 98顶部有一些改进。
符合标准为C和C ++已经比较差了VS. 事情始于2005年发生变化,越来越好。 VS2010就是我真正关注的是与相当多的从C ++ 0x特性的。 大多数虽然时间,我结束了以下关键字谷歌搜索:
- MSDN ANSI C标准
- MSDN ISO C ++一致性
等我真的真的需要弄清楚为什么定义的东西不起作用。
我不使用VS 2008,所以我只能为2005 VS说话。
它不支持C99。 对C89 / 90支持VC一向不错,我不知道有任何不合规问题。
C ++ 98载体具有一些问题,其中一些是由MS为已知问题和一些是纯的错误。 我做了一个博客条目的“记事本”的各种VS 2005 C ++的错误我在实践中遇到的使用。 如果你愿意,你可以看看这里 ,虽然这份名单可能是远未完成