int main()
{
int i=10;
{
int i=100;
printf("%d", i);
}
}
内部“{”和“}”会创建一个新的堆栈帧吗?
答案 0 :(得分:6)
这完全取决于实现,但对于那里的实现,答案是否定的。两个i
变量通常由同一堆栈帧中的两个单独变量实现,但在这种特殊情况下,第一个i
可能会被完全省略。
只有在调用子例程时才需要创建堆栈帧(在i386上)(即使它仅用于返回地址)。在您的情况下不会发生这种情况。
答案 1 :(得分:2)
只有编译器感到痒。当然不涉及语言要求。更具体地说,我想不出有任何理由说任何编译器都会在这里推动框架的冲动,除非为大量本地人优化存储。编译器完全能够在没有运行时帧的情况下管理名称。
答案 2 :(得分:1)
也许。也许不是。该语言不需要它,因此编译器可以随意做任何事情。