为什么这没有给出所需的输出对于Ex-take a=1,b=2,c=3,d=4,它给出MAX4()=2,而在本例中应该是4。
#include<stdio.h>
#define MAX4(a,b,c,d) MAX2(MAX2(a,b),MAX2(c,d))
#define MAX2(a,b) a>b?a:b
int a,b,c,d;
int main(){
/*printf("Please enter 2 integers - \n");
scanf("%d %d",&a,&b);
printf("The maximum number among them is %d\n",MAX2(a,b));
*/
printf("Please enter 4 integers - \n");
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("The maximum number among them is %d\n",MAX4(a,b,c,d));//,MAX2(a,b),MAX2(c,d));
return 0;
}
最佳答案
需要添加括号以强制计算顺序:
#define MAX2(a,b) ((a)>(b)?(a):(b))
参数周围需要有额外的圆括号,以允许像
MAX2(a + 1, b + 2)
这样的表达式。关于c - 在C中的另一个宏内获取宏参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36361102/