如果我的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
的任何数值定义。然后可以使用这些测试:#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