如果我的C中有一个宏:
#ifdef SIGDET
#if SIGDET == 1
isSignal = 1; /*Termination detected by signals*/
#endif
#endif
如何在编译时设置值?它是编译器的一些参数吗?
答案 0 :(得分:3)
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