Приоритет переменных с файловой и локальной областями действия.
Правила области действия констатируют, что у переменной, имеющей как локальную, так и файловую область действия, используется ее локальное, а не глобальное значение. Это положение иллюстрирует следующая небольшая программа:
// 08SCOPEP.CPP
/*Программа на С иллюстрирует проблемы, связанные с правилами
области действия. Предполагается, что функция вычисляет
произведение трех чисел, но каких чисел? Две переменные задаются
как параметры функции. Третья переменная имеет и файловую и
локальную область действия*/
#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 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;
int in=2;
iy=iw*ix*in;
return(iy);
}
Проблемы области действия в C++.
Следующий пример на C++ работает нормально до момента вывода информации на экран. Оператор cout правильно распечатывает значения переменных il и im. Но при обращении к переменной in он выбирает глобальную переменную с файловой областью действия. Результат, выдаваемый программой, 3*7*10 = 42, является явной ошибкой. Как вы знаете, в подобной ситуации функция iproduct() использует локальное значение переменной in.
// 08SCOPEP.CPP
// Программа на C++ иллюстрирует проблемы, связанные с правилами
// области действия. Предполагается, что функция вычисляет
// произведение трех чисел. Переменная in имеет локальную область
// действия и используется в функции для вычисления произведения.
// Однако, в главной функции определено, что значение этой переменной
// равно 10. Что здесь неправильно?
#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 io;
io=iproduct(il,im);
cout << "The product of " << il <<" * " << im << " * " << in << " is: " << io << endl;
printf ("\n\nPress any key to finish\n");
_getch();
return(0);
}
int iproduct(int iw,int ix)
{
int iy;
int in=2;
iy=iw*ix*in;
return (iy);
}