首页 > 解决方案 > 为什么当前宏会返回 14 的值?

问题描述

为什么打印值为 14 ?当我尝试计算当前宏时,我得到了这个。

注意**这个问题是在测试中提出的。

选项 1: 2+3*4++ 然后 2+12++ 然后 2+13 = 15
选项 2: 2+3*4++ 然后 2+12++ 然后 2+12++ = 14 (并且在打印之后值将提高到 15?)

编码:

#include <stdio.h>  
#define MACRO(x,y) x*y++   
void main()
{  
  int a=2,b=3,c=4;
  printf("%d\n",MACRO(a+b,c));
}

此外,我尝试将结果放入 var 并得到相同的结果 14,这意味着打印后值保持为 14。有人可以向我解释为什么 op ++ 根本没有发生吗?

标签: cmacrosc-preprocessor

解决方案


宏执行给定标记的直接替换。所以这:

MACRO(a+b,c)

变成:

a+b*c++

因为乘法比加法具有更高的优先级,所以它首先被执行。

使用宏时的最佳做法是将所有参数括起来:

#define MACRO(x,y) ((x)*(y)++)

然后你会得到:

((a+b)*(c)++)

这可能是您所期望的。

至于前缀++运算符,此运算符计算变量的当前值,然后递增变量。由于++操作员附加到c,这就是增加的内容。表达式的值不会因此而改变,但c现在的值是 5。


推荐阅读