-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 => 10 + (1 * 10) => 20
于 2013-08-07T06:46:38.280 に答える
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

は 10なのでMAXMAXLENは 10+1 で、10+1*10 は 20 です。

マクロ展開は文字列を逐語的に置換するため、文字列を定義するときに括弧を使用する必要があります。例えば:

#define MAXLEN (MAX+1)
于 2013-08-07T06:45:37.853 に答える