область видимости переменной за пределами цикла - PullRequest
2 голосов
/ 14 октября 2010

Я пытаюсь использовать программу, написанную несколько лет назад и скомпилированную в предыдущей версии MS VC ++ (я использую VC ++ 2008). Есть много (сотни) случаев, подобных следующему:

int main () {
  int number = 0;
  int number2 = 0;

  for (int i = 0; i<10; i++) {
   //something using i
  }

  for (i=0; i<10; i++) {
   //something using i
  }

  return 0;
}

Я не уверен, в какой версии он был изначально скомпилирован, но это сработало. Мой вопрос: как это работает? Насколько я понимаю, переменная i должна быть определена только для использования в первом цикле. Когда я пытаюсь скомпилировать его сейчас, я получаю сообщение об ошибке "'i': undeclared identifier" для строки, начинающей второй цикл, что имеет смысл. Было ли это упущено в предыдущих версиях VC ++? Спасибо!

1 Ответ

5 голосов
/ 14 октября 2010

В более ранней версии MSVC была эта «ошибка» в том, что эти переменные просочились в прилагаемую область.

Другими словами, это лечится:

for (int i = 0; i<10; i++) {
    // something using i
}

так же, как:

int i;
for (i = 0; i<10; i++) {
    // something using i
}

См. Ответы на этот вопрос Я спросил о странном макроопределении, для более подробной информации.

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