gpt4 book ai didi

c - printf:如何解释损坏的结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:03 24 4
gpt4 key购买 nike

#include <stdio.h>

int main(void)
{
double resd = 0.000116;
long long resi = 0;

printf("%lld %f %lld %f\n", resd, resd, resi, resi);
return 0;
}

给出(Linux、gcc、x64)

0 0.000116 0 0.000116             ^^^^^^^^ odd, since the memory for resi is zeroed

实际上,使用 g++ 编译它会给出随机结果而不是第二个 0。

我知道我给了 printf 无效的说明符并且它触发了 unspecified 未定义的行为,但我想知道为什么会发生这种特定的损坏,因为 long longdouble 具有相同的大小。

最佳答案

这是因为在您平台上的x86_64 C 调用约定下,前两个浮点参数在xmm0xmm1 中传递,并且前两个整数参数在 GPR 中传递(rsirdx 如果您使用的是 Linux 或 OS X),无论它们出现的顺序如何。

你很困惑,因为你期望参数是在内存中传递的;他们不是。

关于c - printf:如何解释损坏的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670302/

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