問題描述:
以下兩個程序結果比較.
(壹)
#include"stdio.h"
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}
(二)
#include"stdio.h"
#define MIN(x,y) (x)<(Y)?(x):(y)
main()
{
int i=10,j=15,k;
k=10*MIN(i,j);
printf("%d\n",k);
}
第壹個答案給我的分析是:
7>6?7:6*10,即t=7.
第二個答案給我的分析是:
10*i<j?i:j,即100<15?10:15,所以k=15
第壹個程序中10為什麽要乘在後面,而第二個要乘在前面呢?
解析:
妳的分析是正確的,這是壹個關於宏定義的問題,妳可以這樣認為:#define MIN(x,y) (x)<(Y)?(x):(y)這句程序的意思就"在下面的程序中凡是遇到#define MIN(x,y)的地方,都用 (x)<(Y)?(x):(y)來代替就行了,然後按運算符的優先級來運算就行了。"。k=10*MIN(i,j) 可以這樣認為:k=10*(x)<(Y)?(x):(y)即k=10*10<15?10:15,顯然是15。