我最近发现它在C ++中以两个下划线开始任何未定义的行为。
所以我一直在修理所有包含警卫。
但是我遇到了像
这样的代码#ifdef __WINDOWS___
#endif
#ifdef __GNUC__
#endif
但是在Windows编译器UB上没有使用__GNUC__
,反之亦然?我该怎么办?
答案 0 :(得分:5)
你稍微误解了规则。
你可以使用你的工具链已经(或者没有)#DEFINE
d的东西,甚至如果它以两个下划线开头
对于#DEFINE
你自己以两个下划线开头的东西,肯定不很好。
这是一个有用的惯例;这意味着您的源代码不会与编译器实现C ++标准的方式发生冲突。
我很高兴你正在修理你的包含警卫!
答案 1 :(得分:1)
首先,如果你写下来会更好看:
#ifdef _WIN32
...
#endif
因为_WIN32是为所有Windows C ++ / C编译器定义的。 下一步Windows本身不支持GCC。它有一个名为MinGW的简约端口。因此你应该写:
#ifdef __MINGW32__
...
#endif