c - 当使用增量运算符调用时,将哪些值传递给`#define`?
问题描述
我试图在这里理解我的代码的输出:
#include <stdio.h>
#define DOUBLE(x) (x+x)
int main() {
int i, j;
i = j = 3;
printf("%d\n", DOUBLE(++i)); // Output: 10
printf("%d\n", DOUBLE(j++)); // Output: 7
return 0;
}
这是我的解释:DOUBLE
这是一个宏,因此预处理器替换
DOUBLE(++i)
到(++i + ++i)
并且,DOUBLE(j++)
至(j++ + j++)
然后编译器在每个语句中的加法操作之前进行预增量i
和后增量。j
- (5 + 4)
- (3 + 4)
我的逻辑(失败)与输出不匹配。DOUBLE
当我使用具有增量运算符的 argumnets调用时,幕后发生了什么。
解决方案
推荐阅读
- azure - 拉取请求完成时 AzureDev Ops YAML 管道触发
- firebase - 获取文档数据颤动的错误映射
- javascript - 使用 Vue 3 填充 HTML 表格
- c# - c# (ado) alter table add column - 为变量中的列命名 (Datetime)
- azure - Azure VM - 操作无法完成,因为它导致超出批准的标准 Dv2Family 核心配额
- datatables - jQuery Datatables 添加 2 列
- java - 在kafka流应用程序中关闭或不关闭RocksDB Cache和WriteBufferManager
- c# - 获取属性的属性
- docker - 无法使用 wurstmeister/kafka docker 构建多代理 kafka
- python - Python - 列出要求