如何在C编译时确定宏值?

时间:2015-05-16 07:22:06

标签: c compilation macros cc

如果我的C中有一个宏:

#ifdef SIGDET
#if SIGDET == 1
    isSignal = 1;       /*Termination detected by signals*/
#endif
#endif

如何在编译时设置值?它是编译器的一些参数吗?

1 个答案:

答案 0 :(得分:3)

C编译器允许在命令行上定义宏,通常使用-D命令行选项:

这将宏SIGDET定义为值1

gcc -DSIGDET myprogram.c

您可以这样指定值:

gcc -DSIGDET=42 myprogram.c

您甚至可以将宏定义为空:

gcc -DSIGDET=  myprogram.c

考虑到程序的编写方式,将SIGDET定义为空将导致编译错误。将SIGDET定义为2与完全不定义SIGDET的效果相同,这可能不是您所期望的。

最好考虑SIGDET0不同的任何数字定义来触发条件代码。然后你可以使用这些测试:

#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