Переработка имени переменной в пределах одной функции - PullRequest
2 голосов
/ 17 октября 2010

У меня есть функция, которая содержит два цикла for, и я использую переменную с именем count в качестве счетчика.Я выбрал повторное использование имени, поскольку первый цикл полностью завершит свое выполнение до того, как начнется второй, поэтому нет шансов, что счетчики будут мешать друг другу.Компилятор G ++ сделал исключение из этого с помощью следующего предупреждения:

error: name lookup of ‘count’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)

Считается ли рециркуляция переменных плохой практикой в ​​профессиональной разработке программного обеспечения, или это ситуационная проблема, и какие другие последствия я здесь упустил?

Ответы [ 4 ]

4 голосов
/ 17 октября 2010

Ты это делаешь?

for(int count = 0; ...)
{
    ...
}

for(count = 0; ...)
{
    ...
}

Я сомневаюсь, что gcc хотел бы этого, поскольку второй count не находится в области видимости.Я думаю, что это применимо только к первому циклу for, но gcc имеет опции для принятия плохого кода.Если вы либо создадите второе значение int count, либо переместите первое во внешнюю область, gcc должно быть счастливым.

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

2 голосов
/ 17 октября 2010

Похоже, вы определяете переменную в for?то есть "for (int count = 0; count ++; count

2 голосов
/ 17 октября 2010

Стив Макконнелл рекомендует не использовать локальные переменные в функциях в Code Complete.

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

Аргумент в том, что это затрудняет чтение кода.

Что ты считаешь? Назовите переменные после этого.

1 голос
/ 17 октября 2010

Если вы используете такие переменные счетчика цикла, то это обычно не имеет значения.

for (int i ...; ... ; ...) { 
    ... 
}
for (int i ...; ... ; ...) { 
    ... 
}

однако, если вы собираетесь скрывать другую переменную:

int i ...;
for (int i ...; ... ; ...) { 
    ... 
}

это красный флаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...