[問題] 巨集的邊際效應問題

看板C_and_CPP作者 (蝙輻超人)時間14年前 (2010/06/17 20:07), 編輯推噓9(9010)
留言19則, 8人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) #define PLUS(a, b) a+b #define MINUS(a, b) a-b #include <stdio.h> main() { int m1 = 3, m2 = 5; m1 = PLUS(m1, m2)*MINUS(m2, m1); printf(“%d\n”, m1); } 希望得到的正確結果: 正確答案為25 自已的想法是 m1 = 8 * 2 = 16 又或 m1 = 8 * -3 = -24 在程式最後在印出m2的值一樣是5,所以真的搞不懂為什麼執行後的 答案會是25,不知道實際執行時m1這條式子是展開成什麼樣式~ 再麻煩各位指教了,感謝 開發平台: Dev-C++ -- 阿嬤說:「人生不是得到,就是學到。」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.187.52.246

06/17 20:11, , 1F
PLUS(m1, m2)*MINUS(m2, m1) = m1 + (m2*m2) - m1 = m2*m2
06/17 20:11, 1F

06/17 20:19, , 2F
#define PLUS(a, b) (a+b) #define MINUS(a, b) (a-b)
06/17 20:19, 2F

06/17 20:22, , 3F
因為先*/後+-
06/17 20:22, 3F

06/17 20:44, , 4F
就想成define是直接換掉字 所以會變 m1+m2*m2-m1=3+5*5-3
06/17 20:44, 4F

06/17 20:48, , 5F
感謝樓上各位前輩~~C語言幹嘛有這種亂七八遭的東西~真是..
06/17 20:48, 5F

06/17 20:53, , 6F
他是方便使用...這並不亂七八糟不要亂用他就好...
06/17 20:53, 6F

06/17 20:58, , 7F
置底十二誡之十; 你應該自己先搞清楚#define macro是怎
06/17 20:58, 7F

06/17 20:59, , 8F
麼運作的然後用好它, 而不是自己不會還怪語言亂七八糟.
06/17 20:59, 8F
抱歉~~算到腦筯發燒了~~一時氣話~請勿見怪~~~ 另~再請問一題~再請指教~~ #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) main() { int m1 = 1, m2 = 3; PRINT3( MAX( m1++, --m2), m1, m2); } 解答為 1 2 1 第一個「1」是2 < 2 ? m2 : m1 所以答案是1.....是這樣沒錯吧?? 第二個「2」是因為m1++所以m1的值變為2 第三個就是問題了.....怎麼m2的值變為1了,不是才減1次嗎,難道 後面的m2也以--m2代換了 抱歉各位大大了~~小弟EQ不佳~~再請海函~~ ※ 編輯: saka037 來自: 218.187.52.246 (06/17 21:07)

06/17 21:09, , 9F
其實我想知道標題的邊際效應是指什麼
06/17 21:09, 9F

06/17 21:13, , 10F
side effect吧 通常是指非Programmer想要確發生的事情?
06/17 21:13, 10F

06/17 21:16, , 11F
這個不是叫副作用嗎
06/17 21:16, 11F

06/17 21:16, , 12F
PRINT3( (m1++ < --m2 ? --m2 : m1++), m1, m2);
06/17 21:16, 12F

06/17 21:16, , 13F
你的程式展開變這樣 --m2用了兩次 當然變1
06/17 21:16, 13F

06/17 21:34, , 14F
對吼~MAX裡面的m2忘了也代進--m2了~看來我該去冷靜一下了
06/17 21:34, 14F

06/17 21:34, , 15F
所以你還是沒看置底十二誡之十..
06/17 21:34, 15F

06/17 21:36, , 16F
樓上說的是~先不做題目了~還是自新啃書吧~~感謝指教
06/17 21:36, 16F

06/17 22:45, , 17F
抱歉小弟可能回的衝了點, 冒犯之處也請原po見諒<(_ _)>
06/17 22:45, 17F

06/17 22:47, , 18F
的確精華區置底文不爬,只是丟問題等答案,很難進步阿 QQ
06/17 22:47, 18F

06/18 02:52, , 19F
#define PLUS(a, b) ((a)+(b)) 這樣就可以了吧?
06/18 02:52, 19F
文章代碼(AID): #1C6X0N_O (C_and_CPP)