【发布时间】:2014-08-26 22:55:13
【问题描述】:
众所周知,GCC 对 C++ 标准的实现比 Visual C++ 严格得多。 坦率地说,Visual C++ 只是没有很好地遵循 C++ 标准。
对于主要使用 Visual C++ 进行开发但需要至少使用 GCC 进行代码可移植和编译的开发人员来说,这一直是令人头疼的问题。
一些 Visual C++ 语言不当行为记录在 MSDN Nonstandard Behavior topic 中,实际上还有很多其他未记录的案例。
这篇文章的目的是记录所有已知的 VC++ 与 GCC(最流行的 C++ 编译器)的兼容性问题。当某些代码 sn-p 使用 Visual C++ 编译而没有警告(W4 级别)并且不使用 GCC(产生错误或警告)时,会引发问题。
请注意,它仅适用于标准 C++ 问题,__super 或 __forceinline 等 Microsoft 特定语言扩展超出范围。
问题描述的建议格式:
- 代码 sn-p(使用 Visual C++ 编译成功)
- GCC 错误或它产生的警告
- 要重现的两个编译器版本
- 对违反 C++ 标准语句的引用(可选,以后可以添加)
- 解决方案(如何更改代码以使 VC++ 和 GCC 都成功编译)
【问题讨论】:
-
坚持使用标准 C++,您很可能会避免这些陷阱。
-
@40two 即使坚持标准 C++ 也不会很好地工作。正如 OP 所说,Visual Studio 在遵循标准方面真的很糟糕,并且创建适用于两者的代码是实际标准的受限集。那或一堆'#ifdef MSVC'
-
@Smith_61 请注意我的陈述中的“最可能”一词。
-
这个问题太宽泛了,不适合 SO。为了得到完整的回答,需要为每个不符合标准的功能发布代码 sn-ps 和由此产生的错误消息以及替代解决方案。需要一个完整的网站或 wiki 来解决这个主题。
-
无法以 Stack Overflow 格式正确回答的问题不在主题范围内。您要求发布数十个甚至数百个答案,但没有一个答案是正确的。
标签: c++ visual-c++ gcc portability