Приоритет переменных с файловой и локальной областями действия.

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

 

// 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);

}