Сложности в правилах области действия (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);
}