[問題] 想請教#define問題

看板C_and_CPP作者 (I'dont kown)時間12年前 (2012/02/01 22:46), 編輯推噓2(2018)
留言20則, 9人參與, 最新討論串1/1
開發平台(Platform):C++ 問題(Question): #include <iostream.h> #define max(m,n) m>=n?m:n int main() { int y = 8; int z = 8; int x = max(y,z) - y - z; cout << "x:" << x <<endl; system("pause"); return 0; } 想請問程式是怎麼樣跑出來的是8? 我的想法是max(y,z)先assign給x所以才出現8 但是我把z改成9而x卻出現-8 我的問題是這樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.98.50.200

02/01 22:46, , 1F
你要不要先用 gcc -E 看看?
02/01 22:46, 1F

02/01 22:47, , 2F
int x = y>=z?y:z - y - z; // 這是我弄出來的結果 ...
02/01 22:47, 2F

02/01 22:50, , 3F
恩...其實我是想請教這個程式是怎麼跑的
02/01 22:50, 3F

02/01 22:51, , 4F
抱歉我再修改一下我的問題
02/01 22:51, 4F
※ 編輯: love5566188 來自: 175.98.50.200 (02/01 22:55)

02/01 22:53, , 5F
置底13戒之9
02/01 22:53, 5F

02/01 22:55, , 6F
「程式碼-->執行」經過哪些事情? 1.預處理 2.編譯 3.組譯
02/01 22:55, 6F

02/01 22:55, , 7F
請查define與運算子優先順序
02/01 22:55, 7F

02/01 22:56, , 8F
4.連結,後面三個不用管,g++/gcc -E 就是做完第一步
02/01 22:56, 8F

02/01 23:03, , 9F
喔喔我知道了,重點是#define那裡的問題,謝謝樓上各位
02/01 23:03, 9F

02/02 09:09, , 10F
基本上用#define的時候~連argument都該用括號~因為它只是
02/02 09:09, 10F

02/02 09:10, , 11F
做替換而已~所以不用括號容易會出問題~何況你連要替換的東
02/02 09:10, 11F

02/02 09:11, , 12F
西整個都沒有括起來~就會更容易出錯~給你參考^^
02/02 09:11, 12F

02/02 11:21, , 13F
其實我想問,如果沒加括號的話此程式如何跑出x為8?
02/02 11:21, 13F

02/02 11:24, , 14F
int x = 8>=8?8:8 - y - z;
02/02 11:24, 14F

02/02 11:25, , 15F
整理一下,其實就是 int x = (8 >= 8) ? (8) : (8-8-8);
02/02 11:25, 15F

02/02 11:32, , 16F
原來如此,我的想法錯了,謝謝james大
02/02 11:32, 16F

02/02 15:55, , 17F
用#define最好都加上括弧 以免冤枉
02/02 15:55, 17F

02/02 15:56, , 18F
不要執著於什麼運算子優先序 加就是了
02/02 15:56, 18F

02/02 16:02, , 19F
依用途而定... 如果是代表一個值 最好加括弧
02/02 16:02, 19F

02/07 16:31, , 20F
有點月經文的味道
02/07 16:31, 20F
文章代碼(AID): #1FAL0tRE (C_and_CPP)