-4

以下脚本的输出是 20。但是谁能详细说明为什么会这样,而不是 110

#include<stdio.h>
#define MAX 10
#define MAXLEN MAX+1

int main()
{
  printf("%d", MAXLEN * 10);
  getchar();
  return 0;
}
4

3 回答 3

2

考虑一下这扩展到什么

MAXLEN * 10 == MAX+1 * 10

其中,当您考虑运算符优先级时

MAX + (1 * 10) == 10 + (1 * 10)
               == 10 + 10
               == 20

你可能想要

#define MAXLEN (MAX+1)

反而。

于 2013-08-07T06:45:30.717 回答
2

因为MAX是 10,MAXLEN所以是 10+1,然后打印 10+1*10,即 20。

宏扩展逐字替换字符串,这就是为什么在定义它们时必须使用括号。例如:

#define MAXLEN (MAX+1)
于 2013-08-07T06:45:37.853 回答
2
MAXLEN * 10 => MAX + 1 * 10 => 10 + (1 * 10) => 20
于 2013-08-07T06:46:38.280 回答