c - 为什么当前宏会返回 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 ++ 根本没有发生吗?
解决方案
宏执行给定标记的直接替换。所以这:
MACRO(a+b,c)
变成:
a+b*c++
因为乘法比加法具有更高的优先级,所以它首先被执行。
使用宏时的最佳做法是将所有参数括起来:
#define MACRO(x,y) ((x)*(y)++)
然后你会得到:
((a+b)*(c)++)
这可能是您所期望的。
至于前缀++
运算符,此运算符计算变量的当前值,然后递增变量。由于++
操作员附加到c
,这就是增加的内容。表达式的值不会因此而改变,但c
现在的值是 5。
推荐阅读
- javascript - 如何使用后退按钮添加自定义队列
- sql - 如何获得所列问题的 SQL 结果
- python - 根据用户输入动态更改标签文本
- git - git 在 repo 中声明文件未被跟踪
- laravel - 网站构建器中的数据库系统,例如 Wix 或 Squarespace
- java - 哈希函数将 k 个最近的数据映射到同一个桶中
- ios - 有没有办法将多个键连接到 Core Data 中的相同值?
- javascript - 我需要一些特殊的东西才能将 UI Fabric PeoplePicker 与 React 一起使用吗?
- node.js - 如何在树莓中使用 Cron 和 Crontab 对电子进行编程
- json - 如何在反应中正确实现“加载更多”按钮