gpt4 book ai didi

c - 错误的 printf 类型仍然打印正确的值

转载 作者:太空狗 更新时间:2023-10-29 17:24:06 26 4
gpt4 key购买 nike

我刚遇到这种奇怪的情况,但我无法解释。我真的很好奇发生了什么事。我有这个示例代码:

#include <stdio.h>
#include <stdint.h>

int main()
{
int64_t qty = 900;
double p = 74.45;

printf( "%f|%ld\n", p, qty );
printf( "%f|%ld\n", qty, p );
return 0;
}

请注意,在第二个 printf 中,我提供了错误顺序的参数,更不用说类型错误的事实了。但是,我仍然在两者中得到 CORRECT 输出?这有多奇怪……使用 gcc 7.2 编译:

$ ./a.out
74.450000|900
74.450000|900

这是怎么回事?

最佳答案

将错误的参数类型传递给 printf 会导致未定义的行为。当您有未定义的行为时,任何事情都可能发生,包括看似“正确”的行为。

在这种情况下,很可能在此体系结构上将整数和浮点值传递给不同寄存器中的可变参数函数。所以 printf%f 打印第一个浮点寄存器,为 %ld 打印第一个整数寄存器,无论它们被传入的顺序。

然而,这不应该被依赖,甚至可能根据编译器、优化等在这个特定的架构上给出错误的结果。

关于c - 错误的 printf 类型仍然打印正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927342/

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