当在编译时提供定义时,如何检查宏是否已定义。
我有 Makefile 在编译示例 C 文件时解析并传递此字符串 (“-DMACRO_TEST=${DEFINED}
”)。
变量 DEFINED 可能有值,也可能没有值(0 或非零)。
我想知道当变量 DEFINED 本身没有任何值时,如何检查 MACRO_TEST 是否已定义。这类似于编译 C 文件时传递“-DMACRO_TEST=”。
#include <stdio.h>
#ifdef MACRO_TEST
char msg[] = "MACRO_TEST is defined";
#else
char msg[] = "MACRO_TEST is NOT-defined";
#endif
int main ()
{
printf("msg = %s\n", msg);
return 0;
}
命令行输出
$ gcc tmp.c -DMACRO_TEST=0
$ ./a.out
msg = MACRO_TEST is defined
$ gcc tmp.c -DMACRO_TEST=
$ ./a.out
msg = MACRO_TEST is defined
在第二种情况下编译时,我期望它会返回
msg = MACRO_TEST is NOT-defined
最佳答案
如果省略任何选项-DMACRO_TEST
或明确添加 -UMACRO_TEST
(= 取消定义宏)在 gcc
中命令行中,宏不会被定义。在本例中,预处理器指令 #ifdef MACRO_TEST
将为 FALSE,您将得到 p>
char msg[] = "MACRO_TEST is NOT-defined";
在 #else
分支。
(假设您没有在代码中定义此宏。)
关于c - 如何检查 CLI 定义的 MACRO (-DMACRO=) 是否已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56969307/