автоматические переменные с одинаковыми именами в разных блоках C: выделение памяти - PullRequest
0 голосов
/ 21 сентября 2019

Предположим, у меня есть такая структура в C-программе:

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

Сохраню ли я некоторый объем памяти, если вместо этого напишу

int i;

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

?

Переменная i не нужна вне структуры if-else.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2019

Ни один компилятор даже скромного качества не будет генерировать лучший код для одного случая, чем для другого, если, возможно, его функции оптимизации не отключены.

2 голосов
/ 21 сентября 2019

Не беспокойтесь о памяти.

Фрагменты кода имеют различную семантику.

В первом фрагменте кода (две разные) переменные i видны только внутри операторов if и else,Таким образом, они не могут быть доступны вне оператора if.

Во втором фрагменте кода переменная i видима и жива вне оператора if.Если он должен использоваться только в операторе if, тогда объявить переменную в блоке, где она не используется, - плохой стиль программирования.

...