Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 44
Первое, что вы могли заметить — это четырехкратное объявление переменной х. Она объявлена в строке 4 вне функции main(), в строке 8 внутри main(), в строке 13 внутри цикла while и в функции CountLoops() (строка 28). Если вы случайно объявляете переменную более одного раза, компилятор выдает сообщение об ошибке Multiple declaration for 'х' (Многократное объявление 'х') и компиляция прекращается. Тем не менее эта программа компилируется и запускается вполне нормально. Почему? Дело в том, что переменные х из листинга 2.3 имеют различные области видимости.
Посмотрите внимательнее на листинг 2.3. Переменная х в строке 13 объявлена внутри тела цикла while и является локальной по отношению к этому блоку кода. В результате она не существует вне цикла. Аналогично этому переменная х, объявленная в строке 28, локальна по отношению к функции CountLoops() и не существует вне этой функции. В данном случае объявление х менее очевидно, т.к. оно содержится в списке параметров функции, но тем не менее это именно объявление переменной.
Под областью видимости (scope) переменной понимается та часть программы, в пределах которой возможен доступ к этой переменной.
Теперь обратите внимание на переменные х и i, объявленные внутри функции main(). Эти переменные локальны по отношению к тому блоку, в пределах которого объявлены, а также доступны из любого внутреннего блока. Другими словами, областью видимости переменных х и i является как функция main(), так и цикл while. Это достаточно легко понять в случае переменной i, поскольку она объявлена один раз. Но как быть с х? Ведь внутри цикла while существуют две переменные с именем х (одна из них объявлена в main(), а другая — в самом цикле), и обе находятся в области видимости. Которая из них будет использована? Та, которая объявлена в цикле while, потому что она имеет меньшую область видимости.