今天在看K60的库文件的时候对于一些代码不理解就自己建立了一个小的测试代码,上代码
#include<stdio.h> #define CW #if defined (IAR) const int a= #elif defined (CW) const int b= #endif 3; void main(void) { printf("a=%d",a); printf("b=%d",b); }
这是一个很简单的测试代码,如果是上面的代码编译会出错,说a没有定义,有人会说我a定义了啊。。。。这时候预处理的作用就上来了,在代码中我define了CW那么在代码编译的时候就只会运行const int b=3;这一行代码显然a没有定义,那是对的。。。。,还有一个让我们疑惑的地方就是在b和3之间还有一个endif会报错了,一开始我的疑惑就在这里,但是经过自己编代码尝试是不会的,反过来想想这也是对的,因为在预编译处理的时候那些#endif之类的只是告诉编译器一些信息,所以是没有作用的,这句真的代码就只是 const int b=3;