gpt4 book ai didi

c - 以下代码的输出是什么?

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

int main()
{
int x=5,y=10,z=15;
printf("%d %d %d");
return 0;
}

输出:15 10 5//在 Turbo C 4.5 中

    3 Garbage values in gcc compiler

当我们定义像 int x=5,y=10,z=15 这样的变量时,我的老师告诉我;默认情况下,它们被视为自动类型并存储在堆栈中。当您尝试通过 printf() 打印 3 个整数值而不使用它们的名称时,它将像 Turbo C 编译器一样以 LIFO 格式打印这 3 个值。但是我认为当我们定义 3 个整数变量时,它们可能不会存储在连续的内存位置。所以当我尝试打印 3 个整数值而不使用它们的名称时,编译器将从堆栈顶部打印任意三个值。所以输出将像 gcc 中那样出现 3 个垃圾值。

最佳答案

这段代码只是表明 Turbo C 不擅长优化代码并将所有内容都放在堆栈上,而 gcc 更激进并将其保存在寄存器中或将其丢弃因为这三个变量没有目的。

无论如何,使用需要三个参数但不提供这些参数的模式调用 printf 是错误的。

更新:

作为解释:我假设 printf() 将始终从堆栈中获取其参数,因为它是一个具有可变参数列表的函数。或者有人知道像 printf() 这样的函数的任何其他调用约定吗?此外,我假设没有必要在堆栈上放置任何其他内容,因为没有其他变量。所以这个错误的 printf 调用将打印 main() 中堆栈顶部的任何内容。但可能存在其他架构和调用约定,我的假设不成立。

关于c - 以下代码的输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3839914/

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