【发布时间】:2010-12-11 06:11:30
【问题描述】:
我偶尔会写这样的代码:
// file1.cpp
#define DO_THIS 1
#if DO_THIS
// stuff
#endif
在代码开发过程中,我可能会在 0 和 1 之间切换DO_THIS 的定义。
最近我不得不重新排列我的源代码并将一些代码从一个文件复制到另一个文件。但是我发现我犯了一个错误,两个部分像这样分开了:
// file1.cpp
#define DO_THIS 1
和
// file2.cpp
#if DO_THIS
// stuff
#endif
显然我修复了错误,但后来我想,为什么编译器没有警告我?我将警告级别设置为 4。为什么在未定义 X 时#if X 不可疑?
还有一个问题:是否有任何系统的方法可以找出我是否在其他地方犯了同样的错误?这个项目很大。
编辑:我可以理解#ifdef 没有任何警告,这是非常有意义的。但肯定 #if 是不同的。
【问题讨论】:
-
请记住,这是已定义的行为(未定义的预处理符号的值为 0),并且多平台程序很可能会提到许多未定义的预处理器宏。跨度>
-
好问题,感谢发布。
-
非常有趣的问题,但即使在 2020 年,问题标题中似乎也没有答案回答“为什么”。我访问这个页面是为了知道“为什么”(即标准委员会的初衷)......
标签: c++ visual-studio-2008 c-preprocessor