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

时间:2014-12-04 18:43:05

标签: c macros

当我在Linux上执行以下代码时,输​​出为32.为什么会这样?

#include <stdio.h> 
#define m 10+2

int main() {
  int i;
  i = m * m;
  printf("%d", i);
  return 0;
}

2 个答案:

答案 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;
    }