符合Visual C ++标准

时间:2009-10-21 10:29:37

标签: c visual-studio standards

我想知道Microsoft的Visual C ++编译器是否以及在何种程度上符合当前的C(C90 / C99)和C ++(ISO / IEC 14882:2003)标准。不幸的是,我只能找到关于这个主题的部分信息,我可能会看到所有错误的地方。

非常感谢任何指向相关资源的指针。提前谢谢。

编辑: 既然看起来这是一个最敏感的话题,我会满足于对MSVC是否完全符合C90的肯定/否定答案......我已经明白这不是C99的情况(自然) ,我仍然不知道C ++ ..

EDIT2: 感谢大家的回答。我已经接受了Rushakov先生的回答,但对所有相关答案都提出了意见,这些答案都很有帮助。

7 个答案:

答案 0 :(得分:14)

对于Visual C ++,也许MSDN's Nonstandard Behavior page会启发你吗?请务必查看您最感兴趣的版本(右侧的框)。

由于MSDN的链接一直在变化(谁知道原因),这里是VS2008上页面的主要内容,所以当链接断开并有人遇到这个答案时,他们可以通过Google找到正确的页面:

  

非标准行为

     

以下主题是一些   Visual C ++的已知位置   C ++的实现并不一致   使用C ++标准。这部分   数字指的是   C ++标准。

     

答案 1 :(得分:5)

我的宠儿小便,大多数程序员认为不重要,但我个人觉得它会大大损害可读性,因为VC ++无法编译以下C ++代码:

bool result = true and not false;

...因为VC ++无法将andornot(以及ISO 646的其余部分)识别为有效令牌。

澄清:标准提到了§2.12中对上述令牌的处理,将它们标记为§2.11中的保留,并将§2.5中的等价映射定义为更常规的运算符表示(例如and对应&&)。目前尚不清楚为什么他们会在其他关键字旁边获得特殊身份。更令人困惑的是,附录C2.2突然称它们为“关键词”。尽管如此,该标准对于它们的处理和语义仍然非常清楚。 VC根本不实现这些段落(除非您在编译期间指定/Za标志)。

答案 2 :(得分:4)

这是2012年3月2日更新的MSDN blog标题为' C ++ 11 Visual C ++ 11中的功能'的摘要。

答案 3 :(得分:2)

Visual C ++ 2k3,2k5和2k8,符合C89和C ++ 98。

从C99中挑选了一些其他功能,并且在C ++ 98之上还有一些增强功能。

答案 4 :(得分:2)

对于VS而言,C和C ++的标准合规性相当差。事情随着2005年开始发生变化,并且越来越好VS2010是我真正关注的C ++ 0x的很多功能。大多数情况下,我最终使用以下关键字搜索谷歌:

  • msdn ANSI C一致性
  • msdn ISO C ++一致性

等。当我真的需要弄清楚为什么某些东西不能按照定义工作时。

答案 5 :(得分:2)

我还没有使用VS 2008,所以我只能代表VS 2005.

它不支持C99。在VC中对C89 / 90的支持一直很好,我不知道它有任何不合规问题。

C ++ 98支持存在许多问题,其中一些问题由MS记录为已知问题,一些是普通错误。我做了一个博客条目,用作我在实践中遇到的各种VS 2005 C ++漏洞的“笔记本”。如果您愿意,可以查看here,虽然此列表可能远未完成

答案 6 :(得分:2)

__ try被标记为扩展名