读书人

高人救命!1请问一个宏义的有关问题!

发布时间: 2012-02-15 12:09:44 作者: rapoo

高人救命!!1请教一个宏义的问题!!!!
有一组enum值:
enum
{
AA=1,
BB,
CC
}

定义了一个宏
#define PP XX
XX可以取AA,BB,CC

void func(void)
{
printf( "pp=%d\n ",PP);
#if (PP==AA)
代码段A....
printf( "AA\n ");
#elif (PP==BB)
代码段B...
printf( "BB\n ");
#endif
}

我想通过编译期给PP定义不同的enum值,来实现控制不同的代码段,如:
编译期定义:#define PP AA
则编译代码段A,并输出 AA

如果 #define PP BB
则编译代码段B,并输出BB

但实际上结果无论PP定义成什么,第一个#if 条件总是真。但第一个printf打出来PP的值是正确的,始终为预想的enum值。不知是何原因?(但如果将PP直接定义成常数1,2,3,则是正确的。)

我这样写法有错误吗?正确的方法应该怎样实现呢?请高人告知,谢谢!!!!!!


[解决办法]
#if 发生在预处理阶段,而enum发生在编译阶段。

可以全部换成宏:

#define AA 1
#define BB 2
#define CC 3

读书人网 >C语言

热点推荐