#include <stdio.h>
#define N 100
void 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 // defined
}
爲什麼這個輸出打印N
是不確定不應該將其打印N
是100,因爲在f
函數調用它達到去除值100民主基金之前?宏打印輸出
預處理器不會作爲程序的流程運行。 如果您想使此布爾變量不是宏 – Alon
否;預處理器按照文件中的文本順序進行文本處理,並在編譯器正確看到代碼之前執行。當編譯器看到函數'f'的主體時,宏'N'是未定義的。你可以簡單地使用'#undef N';它不會對未定義的宏取消定義,所以'#ifdef N'和匹配的'#endif'是不需要的。 –
宏在運行時在編譯/編譯時解析。它們是_pre_-processed。當你的程序執行時,N不再被定義。 – ryyker