如果我的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

09-25 16:07