[問題] 請教一下關於 變數++ 的問題??

看板C_and_CPP作者 (千里之外)時間12年前 (2012/02/07 14:26), 編輯推噓3(3013)
留言16則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev-c 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 餵入的資料(Input): #include <stdio.h> #include <stdlib.h> #include <stdio.h> #define MAX(a,b) (a<b? b:a) #define PRINT(x) printf("%d",x) #define PRINT3(x,y,z) PRINT(x),PRINT(y),PRINT(z) int main(){ int m1=1, m2=3; PRINT3(MAX(m1++,--m2),m1,m2); system("pause"); return 0; } 預期的正確結果(Expected Output): 1 2 1 請問為什麼是1 2 1,我怎麼想都是2 2 2,請大大指教一下...?? 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.168.2.90

02/07 14:30, , 1F
請問為什麼要把程式寫成這個樣子?
02/07 14:30, 1F

02/07 14:30, , 2F
++放在後面表示先做完之後加1,放在前面表示先+1在做
02/07 14:30, 2F

02/07 14:30, , 3F
1 樓XD
02/07 14:30, 3F

02/07 14:31, , 4F
所以做MAX的時候m1是1,然後變成2,m2先變成1在被指定進MAX
02/07 14:31, 4F

02/07 14:32, , 5F
所以變成MAX(1,1),2,1
02/07 14:32, 5F

02/07 14:32, , 6F
PRINT3((m1++ < --m2 ? --m2 : m1++), m1, m2); //illegal
02/07 14:32, 6F

02/07 14:33, , 7F
看到這個程式碼就不要在浪費自己的腦力了
02/07 14:33, 7F

02/07 14:36, , 8F
你的程式碼翻出來就是這樣 http://ideone.com/GCI0w
02/07 14:36, 8F

02/07 14:44, , 9F
請參照置底十三誡之九
02/07 14:44, 9F

02/07 14:46, , 10F
(這八成又是不知道哪裡出來挖坑整學生的考題...)
02/07 14:46, 10F

02/07 14:46, , 11F
順帶一提, 雖然展出來是如六樓, 但它並無未定義行為
02/07 14:46, 11F

02/07 14:47, , 12F
因為 ? 左邊要結算完才會進到右邊
02/07 14:47, 12F

02/07 14:47, , 13F
不過這種小地方還是別耗腦力在這上面吧...
02/07 14:47, 13F

02/07 15:56, , 14F
我倒是覺得這種題目可以教你為什麼macro不要亂寫
02/07 15:56, 14F

02/07 15:59, , 15F
如果說算是負面教材的話就值得肯定 XD
02/07 15:59, 15F

02/08 00:09, , 16F
零分
02/08 00:09, 16F
文章代碼(AID): #1FCCGDlM (C_and_CPP)