Увод
По областта си на действие идентификаторите/променливите се разделят на локални, нелокални и глобални. Една променлива може да се достъпи, само ако е в рамките на нейната област.
Локални и нелокални променливи
Това са променливите, които са декларирани в даден блок – те са локални за него. Областта им на действие започва с тяхното деклариране и завършва в края на блока. Локалните променливи могат да бъдат достъпни и за други блокове, които се намират в техният блок на действие – тогава те се наричат нелокални за този вътрешен блок. Пример:
- #include <iostream>
- using namespace std;
- int main(){
- int y = 100; // Локална променлива за фукцията main
- cout <<y<<endl; // Ще принтира 100
- { // Нов блок
- int x = 10; // Локална променлива за този вътрешен блок
- cout << x << endl; // Ще принтира 10
- y = y + 1;
- cout << y <<endl; // y e нелокална за този блок и ще принтира 101
- } // Край на новия блок
- cout << x << endl; // Тук ще изведе грешка, тъй като x не e достъпна за блока на main
- cout << y << endl; // y сега ще е 101 тъй като я променихме в блокът
- return 0;
- } // край на main
Разяснение: В главната функция(main) се декларират 2 променливи y и x, y е локална за блока на главната функция и нелокална за съдържащия се в него вътрешен блок. Променливата х е локална за вътрешния блок и недостъпна извън него(в main).
Глобални променливи
Глобалните променливи се декларират извън всички блокове. Тяхното действие започва с декларирането и завършва в края на файла. Пример:
- #include <iostream>
- using namespace std;
- int global = 10;
- int main(){
- int local = 100;
- cout << local << endl; // Ще принтира 100
- cout << global << endl; // Ще принтира 10
- return 0;
- }
Скрити променливи
В рамките на един и същи блок не се допуска да има повече от една променлива с даден идентификатор, но е възможно две променливи от различни блокове да имат един и същ идентификатор. Какво става обаче, когато областа на действие на една променлива е част от областа на действие на друга променлива и идентификаторите им са еднакви? Решението в случая на C++ е, че винаги локалната променлива е с приоритет пред нелокалната (или глобалната). Пример:
- #include <iostream>
- using namespace std;
- int y = 1; // Глобална променлива
- int main(){
- int y = 10; // Локална променлива за фукцията main (със същият идентификатор като глобалната)
- cout << y << endl; // Ще принтира 10
- { //Нов блок
- int y = 100;
- cout << y << endl; // Ще принтира 100 тъй като локалната променлива у = 100
- } //Край на новия блок
- cout << y << endl; // y сега ще е 10 тъй като тук локалната промелива e у = 10
- return 0;
- }
Недостъпни променливи
Променлива, декларирана в даден блок, който няма нищо общо с друг блок, е локална за този, в който е декларирана и недостъпна за другия. Пример:
- #include <iostream>
- using namespace std;
- int main(){
- int a = 10;
- cout << a << endl;
- return 0;
- }
- void func(){
- int a = 101;
- cout << a << endl; // ще принтира 101
- }
Ако се опитаме да използваме променлива, която е недостъпна за даден блок, компилаторът ще изведе грешка по време на компилация.
- #include <iostream>
- using namespace std;
- int ret();
- int main(){
- int a = 10;
- cout<< ret() <<endl;
- return 0;
- }
- int ret() //Тази функция ще се опита да добави 1 към а
- {
- return ++a;
- }
‘a’ was not declared in this scope|
а не е декларирана в този блок.
Автор: SYNCHRO