从宏调用中调用宏

Calling macro from a macro call

为什么下面的代码没有输出三个数中的最大值?

#include<stdio.h>

#define max(a,b) (a>b)?(a):(b)
#define min(a,b) (b>a)?(a):(b)

int main()
{
    printf("%d",max(2,max(1,4)));
    return 0;
}

这导致:

Output: 2

不能在宏调用中调用宏吗?

max(2, max(1,4)) 扩展为 (2> (1>4)?(1):(4) )?(2):( (1>4)?(1):(4) ) 注意 2> (1>4)?2 > false == 2 > 0 这是正确的。所以2是价值。

要解决此问题,请添加一些括号 :)

#include <stdio.h>
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((b)>(a))?(a):(b))

int main()
{
    printf("%d",max(2, max(1,4)));

    return 0;
}

Is calling a macro within a macro call not possible?

可以嵌套宏调用


要获得所需的功能,请在每个参数周围放置一个 () 并在整个表达式周围放置一个 ()

// #define max(a,b) (a>b)?(a):(b)
#define max(a,b) (((a)>(b)) ? (a) : (b))

如果不明智地使用 (),当在 [=16= 中对 max(a,b) 的外部调用中 b 中的参数不平凡时,代码可能无法按预期进行计算]