我经常在C代码中使用类似对象的预处理器宏作为布尔标志来打开和关闭代码段。
例如
#define DEBUG_PRINT 1
然后像这样使用它
#if(DEBUG_PRINT == 1)
printf("%s", "Testing");
#endif
#define
但是,如果忘记将包含 的头文件包含在源代码中,则会出现问题。由于未声明宏,预处理器将其视为等于 0,并且该#if
语句永远不会运行。
当忘记包含头文件时,可能会发生非预期的、不守规矩的行为。
理想情况下,我希望能够在一行中检查是否定义了宏,并检查它是否等于某个值。如果未定义,预处理器会抛出错误(或警告)。
我正在寻找类似的东西:
#if-def-and-true-else-throw-error(DEBUG_PRINT)
...
#endif
它就像 and 的组合#ifdef
,#if
如果不存在,则使用#error
.
我已经探索了一些途径,但是,预处理器指令不能在块内使用,据我所知,如果在语句中#define
使用宏时未定义宏,则没有预处理器选项可以引发错误/警告。#if