前些日子为了弄清楚宏定义写了个小程序,忽然发现将标识符定义为空和将标识符定义为未定义完全是两码事……然后发现原来宏定义中还有一种状态叫“未定义”。下面就是那个小程序以及简单的分析,然后通过这个程序可以充分体验一下这个“未定义”的状态,体验一下什么叫“它被定义了,但它却被定义为未定义”。
程序源码:
#include
int main()
{
#if (A == B)
printf("define A = B\n");
#elif (A == C)
printf("define A = C\n");
#else
printf("nothing is defined!\n");
#endif
return 0;
}
然后下面是编译命令和运行结果:
[root@localhost test]# gcc definetest.c -o definetest
[root@localhost test]# ./definetest
define A = B
[root@localhost test]# gcc definetest.c -o definetest -DA
[root@localhost test]# ./definetest
nothing is defined!
[root@localhost test]# gcc definetest.c -o definetest -DA=C
[root@localhost test]# ./definetes