Шаг 17 - Области видимости внутри функций

Внутри функций код может породить много областей видимости. Каждая пара {} порождает свою область видимости. Давайте посмотрим на код.

#include "stdafx.h"
#include "iostream.h"

void print();

void main(int argc, char* argv[])
{
	print();
}


void print()
{
  int i=5;
  cout << i << endl;
  {
	  int i=6;
	  cout << i << endl;
  }
  cout << i << endl;
}

Как Вы думаете, что появится в результате работы этой программы ???

 5 6 5

То есть объявление переменной внутри {} c тем же именем и манипуляции с ней не повлияли на переменную более глобального уровня. Кстати {} могут появиться просто так в следствии вашей доброй воли, Фигурные скобки являются обязательными в операторах типа

for
while 
swith
и т.д.

И Опять если локальную переменную не объявить, то будет использована переменная из более глобальной области. В этом примере выведутся одни пятерки.

void print()
{
  int i=5;
  cout << i << endl;
  {
	   cout << i << endl;
  }
  cout << i << endl;
}

Самое главное отличие в том, что внутри функций количество вложений блоков не ограничено и как следствия областей определения - реализации. Вот так например :-)

void print()
{
	{
		{
		}
		{
			{
			}
		}
	}
}

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.04.2000