gpt4 book ai didi

c - C程序输出错误

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

#include<stdio.h>
int main()
{
int a=1;
printf("%d%d%d",a,++a,a++);

}

这里为什么输出是 331 而不是 122。

我在网上发现的原因是争论是从右向左传递的。首先 a++ 然后++a 然后 a 被求值,然后以相反的顺序打印。这个理由是否正确。

最佳答案

gcc -S your_source.c 解释你的问题

    movl    $1, -4(%rbp)    #, a
movl -4(%rbp), %ecx # a, a.0
addl $1, -4(%rbp) #, a
addl $1, -4(%rbp) #, a
movl -4(%rbp), %edx # a, tmp61
movl -4(%rbp), %eax # a, tmp62
movl %eax, %esi # tmp62,
movl $.LC0, %edi #, offset to "%d%d%d" sttring
movl $0, %eax #,
call printf #

编译器开发人员一定不要期望有人会尝试以如此丑陋的方式使用它

如果你确实需要122:则按如下方式更改asm代码:

    movl    $1, -4(%rbp)    #, a
movl -4(%rbp), %eax # a, a.0
addl $1, -4(%rbp) #, a
movl -4(%rbp), %edx # a, tmp61
movl -4(%rbp), %ecx # a, tmp62
movl %eax, %esi # tmp62,
movl $.LC0, %edi #,
movl $0, %eax #,
call printf #
addl $1, -4(%rbp) #, a
leave

关于c - C程序输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26117988/

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