c - 如何检查 CLI 定义的 MACRO (-DMACRO=) 是否已定义

标签 c gcc c-preprocessor

当在编译时提供定义时,如何检查宏是否已定义。

我有 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,您将得到

char msg[] = "MACRO_TEST is NOT-defined";

#else分支。

(假设您没有在代码中定义此宏。)

关于c - 如何检查 CLI 定义的 MACRO (-DMACRO=) 是否已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56969307/

相关文章:

c - 如何在 IAR 上使用 stdin.h

c - 从像宏这样的函数访问返回值

c - C 程序中设置的预处理器指令值

计算 C 函数的源代码长度

c - 对使用 -pthread 和 -lpthread 编译的 pthread_wait 的 undefined reference

gcc - gamma(double x) 的定义是什么?为什么它在两个 gcc 版本上不同?

c++ - 如何在 Visual C++ 中使用开源 C 库

C语言定义这个变量的意思

c - C 语言中正确的 Hello World

c - 如何让 C 编译器假定十进制文字(例如 1.23)是 float 而不是 double ?