C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 17 - Области видимости внутри функций / MSDN rus / Visual C++

Шаг 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()
{
	{
		{
		}
		{
			{
			}
		}
	}
}

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


| |
Автор Каев Артем.
[AD]