c语言宏定义问题
- C/C++ code
#include <stdio.h>#define N 100void f(void);int main(void){ f();#ifdef N#undef N#endif return 0;}void f(void){#if defined(N) printf("N is %d\n", N);#else printf("N is undefined\n");#endif}结果怎么是N is undefined这个呢?
[解决办法]
define相关的内容是编译的时候就翻译好的,
虽然你先运行f(),但是。。。
[解决办法]
- C/C++ code
#include <stdio.h>#define N 100void f(void);int main(void){ //f();#if defined(N) printf("N is %d\n", N);#else printf("N is undefined\n");#endif#ifdef N#undef N#endif #if defined(N) printf("N is %d\n", N);#else printf("N is undefined\n");#endif return 0;}void f(void){#if defined(N) printf("N is %d\n", N);#else printf("N is undefined\n");#endif}
[解决办法]
预编译器是按照文本顺序解析的,掉换过来就OK了:
- C/C++ code
#include <stdio.h>#define N 100void f(void){#if defined(N) printf("N is %d\n", N);#else printf("N is undefined\n");#endif}int main(void){ f();#ifdef N#undef N#endif return 0;}