Сложности в правилах области действия (scope rules).

Если используются переменные с различной областью действия, то можно столкнуться с совершенно неожиданными результатами программирования, называемыми побочными эффектами. Например, как вы уже знаете, может существовать переменная (вернее две переменные с одинаковым именем) как с файловой, так и с локальной областью действия. Правила области действия констатируют, что переменная с локальной областью действия (называемая локальной переменной) имеет приоритет по сравнению с переменной с файловой областью действия (называемой глобальной переменной). Хотя это выглядит достаточно просто, давайте рассмотрим несколько проблем, которые не так очевидны и с которыми вы можете столкнуться при программировании.

 

Неопределенные символы в программе на С.

В следующем примере четыре переменные имеют локальную область действия внутри функции main(). Копии переменных il и im передаются в функцию iproduct(). Это не нарушает правила области действия. Однако, когда функция iproduct() пытается обратиться к переменной in, она ее не находит. Почему? Потому что область действия этой переменной локальна для функции main().

 

/*08SCOPEP.C

Программа на С иллюстрирует проблемы, связанные с правилами

области действия. Предполагается, что функция вычисляет

произведение трех чисел. Компилятор выдает ошибку, поскольку

 

 

переменная in не известна функции, вычисляющей произведение*/

 

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <process.h>

#include <ctype.h>

#include <stdlib.h>

#include <math.h>

#include <stdarg.h>

#include <string.h>

using namespace std;

 

int iproduct(int iw,int ix);

/* int in=10; */

 

main ()

{

int il=3;

int im=7;

int in=10;

int io;

io=iproduct(il,im);

/* Произведение чисел равно */

printf("The product of the numbers is: %d\n", io);

 

printf ("\n\nPress any key to finish\n");

_getch();

return(0);

}

 

int iproduct(int iw,int ix)

{

int iy;

iy=iw*ix;

/* iy=iw*ix*in; */

return (iy);

}