当我在Linux上执行以下代码时,输出为32.为什么会这样?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
宏扩展不注意周围的语法,因此i=m*m扩展为i=10+2*10+2,而不是i=(10+2)*(10+2).这就是为什么人们应该总是将宏定义和参数括起来:
#define m (10+2)
Run Code Online (Sandbox Code Playgroud)