gpt4 book ai didi

c - C 中的宏和前/后增量

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:14 25 4
gpt4 key购买 nike

<分区>

我在使用预增量运算符时注意到宏函数的这种奇怪行为。我知道将预增量运算符与宏一起使用并不可取,但我仍然想知道执行以下 2 个代码背后的原因:

#include <stdio.h>

#define SQR(x) {x*x }

int main()
{
int a=4;
int b=SQR(a++);
int c=SQR(++a);
printf("%d.....%d....%d\n",b,c,a*b*c);
return 0;
}

这个的输出是:

20.....64....10240

第一个值b是20,4*5还行。但为什么 C 的值为 64,即 8*8 而不是 7*8?

我只是像这样替换了执行顺序:

#include <stdio.h>

#define SQR(x) {x*x }

int main()
{
int a=4;
int c=SQR(++a);
int b=SQR(a++);
printf("%d.....%d....%d\n",b,c,a*b*c);
return 0;
}

这个的输出是:

42.....36....12096

是不是很奇怪?预增量再次出现问题。它给出了 42,即 6*7 而不是 5*6,之后后增量也给出了错误答案 36,即 6*6 而不是 6*7。

如果有人能解释为什么输出是这样的,那将是一个很大的帮助?

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