作者loveme00835 (恋さや)
看板C_and_CPP
標題Re: [問題] 關於使用define方式輸出結果的問題
時間Sat Feb 27 18:47:52 2010
※ 引述《jelt (Jelt)》之銘言:
: 這個問題其實是看普考考古題看到的,題目如下:
: #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;
: }
PRINT3(MAX(m1++, --m2), m1, m2);
=> PRINT1(MAX(m1++, --m2)),
PRINT1(m1),
PRINT1(m2)
=> PRINT1( ( m1++ < --m2 ? --m2 : m1--) ),
PRINT1(m1),
PRINT1(m2)
detail:
step1: m1++ < --m2 結果為真 : 1 < 2
執行完 : m1 == 2, m2 == 2
step2: --m2 執行完 : m2 == 1
step3: MAX 結果 為 1
這個問題剛好 Effective C++ 一書中的 Item 1 中有提到
多用const 跟 inline function 來取代巨集吧~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.22.35
※ 編輯: loveme00835 來自: 114.45.22.35 (02/27 18:52)
→ jelt:過去看的中文書,講的都超不詳細,過然還是要原文書比較豐富 02/27 19:08
→ hilorrk:Effective好像也有中文的吧... 02/27 22:12