当 X 未定义时,为什么没有“#if X”警告?

2024-01-12

我偶尔会写这样的代码:

// file1.cpp
#define DO_THIS 1

#if DO_THIS
    // stuff
#endif

在代码开发过程中我可能会切换定义DO_THIS0 到 1 之间。

最近,我不得不重新排列我的源代码并将一些代码从一个文件复制到另一个文件。但我发现我犯了一个错误,两部分已经分开了,如下所示:

// file1.cpp
#define DO_THIS 1

and

// file2.cpp
#if DO_THIS
    // stuff
#endif

显然我修复了错误,但后来我想,为什么编译器没有警告我?我已将警告级别设置为 4。为什么没有#if X当 X 未定义时可疑?

还有一个问题:是否有任何系统的方法可以找出我是否在其他地方犯了同样的错误?工程量巨大。

编辑:我可以理解没有 #ifdef 警告,这是完全有道理的。但#if 肯定是不同的。


gcc 可以为此生成警告,但标准可能不要求:

-Wundef
如果在“#if”指令中计算未定义的标识符,则发出警告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 X 未定义时,为什么没有“#if X”警告? 的相关文章

随机推荐