引用:
|
作者@"@
再來一題
#define MAX (a,b) (a<b ?b:a)
#define PRINT1(x) printf("%d",x)
#define PRINT2(x,y,z) PRINT1(x),PRINT1(y),PRINT1(z)
int m1=1,m2=3;
PRINT2 (MAX(m1++,--m2),m1,m2);
這個怎樣看 
|
不負責推演:
PRINT2 (MAX(m1++,--m2),m1,m2);
PreProcessing:
=> PRINT1(MAX(m1++, --m2)), PRINT1(m1), PRINT1(m2);
=> printf("%d", MAX(m1++, --m2)), PRINT1(m1), PRINT1(m2);
=> printf("%d", m1++ < --m2 ? --m2 : m1++), PRINT1(m1), PRINT1(m2);
=> printf("%d", m1++ < --m2 ? --m2 : m1++), printf("%d", m1), printf("%d", m2);
Executing
=> printf("%d", 1 < 2 ? 1 : 2), printf("%d", 2), printf("%d", 1);
=> 121