不同 C 块中同名的 auto 变量:内存分配

auto variables with the same name in different C blocks: memory allocation

假设我在 C 程序中有这样的结构:

if (res == NULL)
{
    int i = 1;
    ...
}
else
{
    int i = 2;
    ...
}

如果我改写

会节省一些内存吗
int i;

if (res == NULL)
{
    i = 1;
    ...
}
else
{
    i = 2;
    ...
}

?

在 if-else 结构之外不需要变量 i

不要为内存烦恼。

代码片段具有不同的语义。

在第一个代码片段中,(两个不同的)变量 i 仅在 if 和 else 语句中可见。 所以他们不能在if语句之外访问。

在第二个代码片段中,变量 i 在 if 语句之外可见且有效。如果它应该只在 if 语句中使用,那么在不使用变量的块中声明变量是一种糟糕的编程风格。

即使是一般质量的编译器也不会为任何一种情况生成比另一种情况更好的代码,除非可能禁用其优化功能。