为什么这没有给出所需的输出对于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/

10-11 16:37