当尝试调试我的代码时,我用这个标记了一些 printf
:
#if debug
printf(...);
#endif
并且在文件的开头,我错误地写了 #define debug
而不是 #define debug 1
gcc 抛出以下错误:
error: #if with no expression
现在我有两个选择:
- 将定义更改为
#define debug 1
- 将 if 更改为
#ifdef debug
我知道在看到 #define debug 1
后,PP 会将我代码中的每个 debug
替换为 1
,这就是为什么 #if debug
在我的代码中不起作用 - 编译器看不到任何表达式...
我的问题是,当我使用 #ifdef debug
时 - 会发生什么?我认为 debug
保存在某个地方并进行了检查,但是在哪里以及如何进行检查?
最佳答案
其实很简单:#define debug
does将debug
定义为空。它仍然是定义的。空宏不同于不存在的宏。 #undef debug
将删除宏。
#ifdef
不关心这个值。它只检查宏是否定义为任何内容。如果您不关心该值,请始终使用 #ifdef
。
关于c - 在没有替换字符串的情况下使用#define 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184529/