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