【发布时间】:2020-12-05 04:27:21
【问题描述】:
我有一个关于未定义变量和下面演示的代码片段的问题:
在func_1() 之后——它会将A 压入堆栈并将该内存的值设置为40,然后将A 从堆栈中弹出。
在func_2()之后——会再次将A压入栈中,并继承之前设置的值,打印出来的值为40。
void func_1()
{ int A = 40;}
void func_2()
{ int A; printf("%d/n",A);}
void main (void)
{
func_1();
func_2();
}
如果我们将func_2()中的名称A改成B来测试栈的使用,并在里面添加额外的代码来测试命名变量池的使用:
int A; printf("%d\n", A);
在我的电脑上,B 是 40,A 是 0。
我想知道的是,如果编译器有一个命名变量池,它可以重用以帮助优化编译的代码(?),那么为什么我在A 上得到一个 0?
编译器什么时候使用池?
我的问题基于这张幻灯片: http://www.slideshare.net/olvemaudal/deep-c/131-I_am_now_going_to
【问题讨论】:
标签: c compiler-construction undefined