int main()
{
int x=5,y=10,z=15;
printf("%d %d %d");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:15 10 5 //在Turbo C 4.5中
3 Garbage values in gcc compiler
Run Code Online (Sandbox Code Playgroud)
当我们定义变量时,我的老师告诉我,如int x = 5,y = 10,z = 15; 默认情况下,它们被视为自动类型并存储在堆栈中.当您尝试打印3个整数值而不使用printf()的名称时,它将以Turbo C编译器的形式打印这3个LIFO格式的值.但是我认为当我们定义3个整数变量时,它们可能不会存储在连续的内存位置.所以当我尝试打印3个整数值而不使用它们的名称时,编译器将从堆栈顶部打印任意三个值.所以输出将有3个垃圾值,如gcc ..
Cod*_*odo 10
这段代码只是表明Turbo C很难优化代码并将所有内容放在堆栈上,而gcc更具侵略性并将其保存在寄存器中或将它们全部抛在一起,因为这三个变量没有任何意义.
无论如何,使用需要三个参数而不提供这些参数的模式调用printf是一个错误.
更新:
作为解释:我假设printf()将始终从堆栈中获取其参数,因为它是具有可变参数列表的函数.或者有人知道printf()等函数的任何其他调用约定吗?此外,我假设没有必要在堆栈上放任何其他东西,因为没有其他变量.所以这个错误的printf调用将打印main()中堆栈顶部的任何内容.但是可能还有其他架构和调用约定我的假设不成立.