作者jelt (Jelt)
看板C_and_CPP
標題[問題] 關於使用define方式輸出結果的問題
時間Sat Feb 27 18:25:06 2010
這個問題其實是看普考考古題看到的,題目如下:
#include<stdio.h>
#define MAX(a, b) (a<b?b:a)
#define PRINT1(x) printf("%d", x)
#define PRINT3(x, y, z) PRINT1(x),PRINT1(y),PRINT1(z)
int main(){
int m1=1, m2=3;
PRINT3(MAX(m1++, --m2), m1, m2);
getch();
return 0;
}
顯示結果為
121
我搞不懂,我自己驗算怎麼算都是"222"
可是用Dev-C++結果也是"121"
我怎麼想都想不通
PRINT3(MAX(m1++, --m2), m1, m2);
--m2,m2=2,當然因該回傳2啊,為什麼會變成"1"
--m2也只是讓m2=2, 為啥之後的PRINT1(z)會變成"1"
還請知道原因的前輩告知,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.201.170
推 vizshala:因為你的b代表--m2 02/27 18:39
推 loveme00835:理解巨集運作原理請把它全部代換掉, 因為他不是函數唷 02/27 18:40
→ jelt:原來如此啊! 我不應該用函是的方式去思考,感謝告知! 02/27 19:06