【发布时间】:2011-08-31 21:08:15
【问题描述】:
我在编写需要在 Visual Studio 2008 和 GCC 4.6 中编译(并且还需要编译回 GCC 3.4)的 C++ 代码时遇到问题:static const int 类成员。
Other questions have covered 静态 const int 类成员所需的规则。特别是,标准和 GCC 要求变量在一个且只有一个目标文件中定义。
但是,Visual Studio 在编译包含 .cpp 文件中的定义的代码(在调试模式下)时会产生 LNK2005 错误。
我试图在其中做出决定的一些方法是:
- 用 .cpp 文件中的值初始化它,而不是头文件。
- 使用预处理器删除 MSVC 的定义。
- 用枚举替换它。
- 用宏替换它。
最后两个选项不吸引人,我可能不会使用任何一个。第一个选项很简单——但我喜欢在标题中有值。
我在答案中寻找的是一种好看的最佳实践方法来构建代码以同时让 GCC 和 MSVC 满意。我希望有一些我还没有想到的美妙的东西。
【问题讨论】:
-
Visual Studio 不应该那样做,我想你可能做错了。
-
您在使用
/Za(禁用语言扩展)。如果没有,是否可以使用此开关? connect.microsoft.com/VisualStudio/feedback/details/379496/… -
@Branko:因为它将课堂上的所有重要内容都放在了一个地方。标题就像一个类的轮廓,值对于理解类的使用方式以及哪些值适合数组大小等很重要。
-
您对枚举有什么保留?
-
@Tobias:我不确定我为什么不喜欢枚举。这似乎是在滥用他们的目的。
标签: c++ visual-c++ gcc cross-platform