gpt4 book ai didi

c - 后增量运算符 : Unexpected Behavior

转载 作者:太空狗 更新时间:2023-10-29 16:59:02 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

我的代码如下:

#include <stdio.h>
int main()
{
int x = 10, y = 0;
x = x++;
printf("x: %d\n", x);
y = x++;
printf("y: %d\n", y);
}

鉴于后增量的性质,我希望得到以下输出:

x: 10
y: 10

我的推理是,在第 5 行中,x 应该在增量发生后赋给它的初始值。

相反,我得到了这个:

x: 11
y: 11

深入研究程序集,这对我来说似乎是一个深思熟虑的选择:

LCFI2:
movl $10, -4(%rbp) // this is x
movl $0, -8(%rbp) // this is y
incl -4(%rbp) // x is simply incremented
movl -4(%rbp), %esi
leaq LC0(%rip), %rdi
movl $0, %eax
call _printf
movl -4(%rbp), %eax // now x is saved in a register,
movl %eax, -8(%rbp) // copied to y,
incl -4(%rbp) // and finally incremented
movl -8(%rbp), %esi
leaq LC1(%rip), %rdi
movl $0, %eax
call _printf

这是怎么回事? GCC 是在试图拯救我吗?我没有方便的语言引用,但我认为这会破坏预期的语义。

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