次のスクリプトの出力は 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 => 10 + (1 * 10) => 20
これが何に展開するかを考えてみましょう
MAXLEN * 10 == MAX+1 * 10
これは、演算子の優先順位を考慮すると
MAX + (1 * 10) == 10 + (1 * 10)
== 10 + 10
== 20
あなたはおそらく欲しかった
#define MAXLEN (MAX+1)
代わりは。
は 10なのでMAX
、MAXLEN
は 10+1 で、10+1*10 は 20 です。
マクロ展開は文字列を逐語的に置換するため、文字列を定義するときに括弧を使用する必要があります。例えば:
#define MAXLEN (MAX+1)