以下脚本的输出是 20。但是谁能详细说明为什么会这样,而不是 110
#include<stdio.h>
#define MAX 10
#define MAXLEN MAX+1
int main()
{
printf("%d", MAXLEN * 10);
getchar();
return 0;
}
以下脚本的输出是 20。但是谁能详细说明为什么会这样,而不是 110
#include<stdio.h>
#define MAX 10
#define MAXLEN MAX+1
int main()
{
printf("%d", MAXLEN * 10);
getchar();
return 0;
}
考虑一下这扩展到什么
MAXLEN * 10 == MAX+1 * 10
其中,当您考虑运算符优先级时
MAX + (1 * 10) == 10 + (1 * 10)
== 10 + 10
== 20
你可能想要
#define MAXLEN (MAX+1)
反而。
因为MAX
是 10,MAXLEN
所以是 10+1,然后打印 10+1*10,即 20。
宏扩展逐字替换字符串,这就是为什么在定义它们时必须使用括号。例如:
#define MAXLEN (MAX+1)
MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20