Re: [問題] 關於使用define方式輸出結果的問題
※ 引述《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)
→
02/27 19:08, , 1F
02/27 19:08, 1F
→
02/27 22:12, , 2F
02/27 22:12, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):