gpt4 book ai didi

c - 这段代码打印了什么以及为什么?

转载 作者:行者123 更新时间:2023-11-30 21:15:19 26 4
gpt4 key购买 nike

谁能解释一下为什么这段代码打印的是 1 3 0 0 0 -1,而不是 1 2 3 0 0 0?这个定义调用是如何工作的?

#include<stdio.h>
#define SOMETHINGDEFINED(i) A[i%4]

int main(void) {
int i, A[6] = { 1 };
SOMETHINGDEFINED(1) = 2;
SOMETHINGDEFINED(5) = 3;
SOMETHINGDEFINED(4 + 2) = SOMETHINGDEFINED(1 + 3 + 1)--;
for (i = 0; i < 6; i++) {
printf("%d ", A[i]);
}
return 0;
}

最佳答案

#define 进行文本替换,因此

SOMETHINGDEFINED(1 + 3 + 1)--

变成了

A[1 + 3 + 1%4]--

现在您可以看到模数仅应用于最后一个操作数,而不应用于整个表达式。您必须将宏定义为

#define SOMETHINGDEFINED(i) A[(i)%4]

将其正确应用到整个表达式。

关于c - 这段代码打印了什么以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com