Глобальные и локальные переменные

Вызов логических функций

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

boolisPrime(intn){

for(inti=2;i<=n-1;i++){

if(n%i==0){

returnfalse;

}

}

returntrue;

}

intmain()

{

//Можно так

isPrime(17)?cout<<"Yes":cout<<"No";

//Или так

for(inti=2;i<100;i++){

if(isPrime(i)){

cout<<i<<endl;

}

}

Посмотрите на следующий пример:

int x = 10;

int summa(int y) {

result = x+y;

return x + y;

}

А теперь еще один:

int summa_version2(int y) {

int x = 10;

result = x+y;

return result;

}

В чем отличие этих двух фрагментов кода? Нетрудно заметить, что отличие заключается в объявлении переменной x: в первом случает она объявлена до функции, а во втором – после. Во что выльется такая разница?

В первом случае переменная является глобальной, т.е. доступной во всех функциях программы, а во втором – локальной, т.е. доступной только внутри функции, где она объявлена. Константы, заданные при помощи директивы #define являются глобальными.

Как Вы думаете, какой вариант правильный? С точки зрения языка программирования правильны оба варианта, поскольку обе программы успешно откомпилируются и при запуске приведут к одному результату. Но с точки зрения хорошего стиля программирования, который, в конечном счете, приводит к более понятным и легко отлаживаемым программам.

Обратите внимание, что данная запись является неправильной:

summa_version2(4,7);

cout << result;

Функция, как и любая другая конструкция языка Си, делит переменные на глобальные и локальные. Локальными являются те переменные, которые описаны внутри функции и, значит, доступны только внутри этой функции. Например, в следующем фрагменте кода переменная result – локальная:

int summa(int a, int b) {

int result = a+b;

return result;

}

Понятие локальной переменной относится не только к функциям, но и к другим конструкциям языка. Например, в следующем фрагменте переменная i является локальной для цикла:

for (int i=0; i<10; i++) {

}

Переменная, описанная внутри некоторого блока, ограниченного фигурными скобками, является локальной для этого блока:

if (…) {

int x;

}

Обращение к локальной переменной за пределами блока, где она описана, приведет к ошибке компиляции, однако можно описать переменную с таким же именем за пределами этого блока, и это будет уже другая переменная.

Внимание – частая ошибка!

Определять или объявлять функции внутри других функций нельзя! Вызывать можно, но определять или объявлять – нет. Например, следующая программа ошибочна:

int main() {

//Локальное определение недопустимо!

void say_hello() {

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

}

}

int main() {

//Локальное объявление недопустимо!

void say_hello();

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: