我碰到一個項目來了一架C性向問題網站爲什麼宏的值在被調用函數中沒有變化?
#define i 20
void fun();
int main(void)
{
printf("%d..",i);
fun();
printf("%d",i);
}
void fun() {
#undef i;
#define i 30
}
這裏的輸出變成
20..20
但據我來說,這應該是
20..30
爲什麼多申」 t i
的值在撥打fun()
後變爲30?
#define i 20
void fun();
int main(void)
{
printf("%d..",i);
#define i 50
printf("%d",i);
}
但是,如果我編譯並運行上述程序的輸出變成20..50 那麼現在怎麼宏值在運行時更改。
答案在於預處理器和編譯器之間的區別。搜索網絡的一些信息,它應該很清楚。 – 2015-02-08 13:43:59
在運行程序之前,甚至在編譯之前處理宏。讓你的編譯器寫出「預處理」的代碼,你會看到「我」做什麼。 (另外:絕對不要在「define」中包含分號,用你明顯的經驗水平,你**會得到一些令人討厭的驚喜!) – usr2564301 2015-02-08 13:45:52