我寫的程序如下:不能正常工作
#include<cstdio>
#define max(a,b) a>b?a:b
using namespace std;
int main()
{
int sum=0,i,k;
for(i=0;i<5;i++)
{
sum=sum+max(i,3);
}
printf("%d\n",sum);
return 0;
}
我得到的輸出:4
但是,當我在一個變量k
存儲max(i,3
)和然後添加到sum
,我得到了正確的輸出:
#include<cstdio>
#define max(a,b) a>b?a:b
using namespace std;
int main()
{
int sum=0,i,k;
for(i=0;i<5;i++)
{
k=max(i,3);
sum=sum+k;
}
printf("%d\n",sum);
return 0;
}
輸出:16
有人可以請解釋爲什麼會發生?
總是使用parens來定義帶參數的宏(a> b)?a:b) – BsD 2015-02-11 14:47:13
因爲它是一個宏。 – 2015-02-11 14:47:17
@BsD,這是宏應儘可能避免的確切原因。您的更正仍然缺少括號:'((a)>(b)?(a):(b))' – chris 2015-02-11 14:49:49