在不同的C块中具有相同名称的自动变量:内存分配

时间:2019-09-21 11:36:40

标签: c variables scope automatic-storage

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

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

如果我改写,会节省一些内存

int i;

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

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

2 个答案:

答案 0 :(得分:3)

质量适中的编译器在任何一种情况下都不会比另一种情况生成更好的代码,除非可能禁用了其优化功能。

答案 1 :(得分:2)

不要在意内存。

代码段具有不同的语义。

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

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