m是定义为10 + 2的宏; 为什么m*m评估为32?

RAM*_*AMD -2 c macros

当我在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)

Aas*_*set 5

宏扩展不注意周围的语法,因此i=m*m扩展为i=10+2*10+2,而不是i=(10+2)*(10+2).这就是为什么人们应该总是将宏定义和参数括起来:

#define m (10+2)
Run Code Online (Sandbox Code Playgroud)