从宏调用中调用宏
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
中的参数不平凡时,代码可能无法按预期进行计算]
为什么下面的代码没有输出三个数中的最大值?
#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
中的参数不平凡时,代码可能无法按预期进行计算]