码:
#include <stdio.h>
int var = 20;
int main()
{
   int var = var;
   printf("%d\n", var);
   return 0;
}
GCC在此代码中输出垃圾值.我的疑问是,这应该输出"20".
说明:每当我们为任何全局/局部变量赋值时,第一条指令是计算机将指定的值保存到寄存器中,然后将其放入内存中.所以,据我所知,当编译器来到"int var = var"时,它应该首先将值20保存到特定寄存器.之后它会将它保存到局部变量.然后全局变量应该超出范围.是的,它与首先分配变量名称而不是其值的陈述相矛盾.因此,int var使全局var变量超出范围并使局部变量自己赋值,这相当于未初始化的局部变量.
在C和C++中,变量的范围在声明后立即开始.因此,当读取值var以便将其分配时var,本地var已经在范围内.
讨论寄存器和记忆以及其他一些问题; C是一种标准化语言,其行为取决于标准.
int var = var;
是未定义的行为.它是具有未初始化值的自我赋值.
| 归档时间: | 
 | 
| 查看次数: | 2850 次 | 
| 最近记录: |