当我在Linux上执行以下代码时,输出为32.为什么会这样?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
答案 0 :(得分:5)
宏扩展不会注意周围的语法,因此i=m*m
会扩展为i=10+2*10+2
,而不是i=(10+2)*(10+2)
。这就是为什么人们应该总是将宏定义和参数括起来:
#define m (10+2)
答案 1 :(得分:2)
i=m*m
实际上计算为
10 + 2×10 + 2
是
10 + 20 + 2 = 32
#include<stdio.h>
#define m 10+2
int main()
{
int i;
i=(m)*(m); \\this will provide you with output as (10+2)*(10+2)
printf("%d",i);
return 0;
}