|
Программирование >> Процедурные приложения
* определения области видимости переменной. Во время компиляции * программы появится сообщение об ошибке. #include <stdio.h> int iproduct(int iw, int ix); int main () { int il = 3; int im = 7; int in = 10; int io; io = iproductfil, im) ; printf( Произведение чисел равно %d\n ,io) ; return(0); } int iproduct (int iw, int ix) int iy; iy = iw * ix * in; return (iy); } Компилятор выдаст сообщение об ошибке, в котором говорится о том, что в функции iproduct( ) обнаружен нераспознанный идентификатор in. Чтобы решить эту проблему, нужно сделать переменную in глобальной. В следующем примере переменная inописана как глобальная. В результате обе функции, как main(),так и iproduct(), могут использовать ее. Обратите также внимание на то, что и та, и другая функция может изменить значение переменной in. * fscope. с * Это исправленная версия предыдущей программы. Проблема решена путем * объявления переменной in как глобальной. #include <stdio.h> int iproduct (int iw, int ix) ; int in = 10; int main() ( int il = 3; int im = 7; int io; io = iproduct (il,im) ; printf( Произведение чисел равно %d\n ,io) ; return (0); int iproduct(int iw, int ix) int iy; iy = iw * ix * in; return(iy); Эта программа будет корректно скомпилирована, и на экране появится результат - 210. Как уже было сказано, локальная переменная перекрывает одноименную глобальную переменную. Ниже показан вариант предыдущей программы, иллюстрирующий данное правило. * Is соре. с * Эта программа на языке С иллюстрирует взаимоотношение * между одноименн1ми локальной и глобальной переменн1ми. * Функция iproduct() находит произведение трех переменных, * из которых две передаются как аргументы функции, а еще * одна, in,объявлена и как глобальная, и как1 локальная. #include <stdio.h> int iproduct(int iw, int ix); int in = 10; int main() int il = 3; int im = 7; int io; io = iproduct(il,im) ; printf( Произведение чисел равно %d\n ,io) ; return (0); int iproduct(int iw, int ix) { int iy; int in = 2; iy = iw * ix * in; return(iy); } В этом примере переменная inописывается дважды: на уровне файла и на уровне функции. В функции iproduct(), где эта переменная объявлена как локальная, будет использовано локальное значение. Поэтому результатом умножения будет 3*7*2 = 42. Оператор расширения области видимости В следующей программе, написанной на языке C++, все работает нормально до момента вывода информации на экран. Объект cout правильно отобразит значения переменных 11 и im, но для переменной inбудет выбрано глобальное значение. Вследствие этого пользователю будет представлен неправильный результат: 3*7*10= 42 . Как вы уже поняли, ошибка возникает из-за того, что в функции iproduct() используется локальная переменная in. scopel.срр Эта программа на языке C++ содержит логическую ошибку. Функция iproduct() находит произведение трех переменных, используя при этом значение локальной переменной in. В то же время в выводимых данных программа сообщает о том, что значение переменной inравно 10. #include <iostream.h> int iproduct (int iw, int ix); int in = 10; int main() int 11 = 3; int im = 7 ; int io; io = iproduct (il,im) ; cout << il << * << im << * << in << = << io << \n ; return (0); int iproduct(int iw, int ix) { int iy; int in = 2; iy = iw * ix * in; return (iy);} Что же нужно сделать, чтобы получить правильный результат? Для этого достаточно воспользоваться оператором расширения области видимости (::) , о котором мы уже упоминали: iy = iw * ix * ::in; Следующая программа иллюстрирует сказанное. scope2.cpp Это исправленная версия предыдущего примера. Проблема решена путем использования оператора расширения области видимости (::). #include <iostream.h> int iproduct(intiw, int ix) ; int in = 10; int main () int il = 3; int im = 7; int io; io = iproduct(il,im) ; cout << il << * << im << * << in << = << io << \n ; return (0); int iproduct(intiw, int ix) int iy; int in = 2; iy = iw * ix * (::in); return(iy);} Переменная in вместе с оператором :: для наглядности взяты в скобки, хотя в этом нет необходимости, так как данный оператор имеет самый высокий приоритет среди остальных. Таким образом, на экран будет выведен правильный результат: 3*7*10 = 210 .
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |