如何在 C 编译时确定宏值?
How to determine macro value at compilation time in C?
如果我的 C:
中有一个宏
#ifdef SIGDET
#if SIGDET == 1
isSignal = 1; /*Termination detected by signals*/
#endif
#endif
如何设置编译时的值?它是编译器的一些参数吗?
C 编译器允许在命令行定义宏,通常使用 -D
命令行选项:
这将宏 SIGDET
定义为值 1
。
gcc -DSIGDET myprogram.c
您可以这样指定值:
gcc -DSIGDET=42 myprogram.c
您甚至可以将宏定义为空:
gcc -DSIGDET= myprogram.c
鉴于您的程序是如何编写的,将 SIGDET 定义为空会导致编译错误。将 SIGDET
定义为 2
与根本不定义 SIGDET
具有相同的效果,这可能不是您所期望的。
最好考虑 SIGDET
与 0
不同的任何数字定义来触发条件代码。然后您可以使用这些测试:
#ifdef SIGDET
#if SIGDET+0
isSignal = 1; /*Termination detected by signals*/
#endif
#endif
或者这个选择:
#if defined(SIGDET) && SIGDET+0
isSignal = 1; /*Termination detected by signals*/
#endif
如果我的 C:
中有一个宏#ifdef SIGDET
#if SIGDET == 1
isSignal = 1; /*Termination detected by signals*/
#endif
#endif
如何设置编译时的值?它是编译器的一些参数吗?
C 编译器允许在命令行定义宏,通常使用 -D
命令行选项:
这将宏 SIGDET
定义为值 1
。
gcc -DSIGDET myprogram.c
您可以这样指定值:
gcc -DSIGDET=42 myprogram.c
您甚至可以将宏定义为空:
gcc -DSIGDET= myprogram.c
鉴于您的程序是如何编写的,将 SIGDET 定义为空会导致编译错误。将 SIGDET
定义为 2
与根本不定义 SIGDET
具有相同的效果,这可能不是您所期望的。
最好考虑 SIGDET
与 0
不同的任何数字定义来触发条件代码。然后您可以使用这些测试:
#ifdef SIGDET
#if SIGDET+0
isSignal = 1; /*Termination detected by signals*/
#endif
#endif
或者这个选择:
#if defined(SIGDET) && SIGDET+0
isSignal = 1; /*Termination detected by signals*/
#endif