Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Правила видимости имен для функций




Организация памяти при выполнении программы

Выход из функции

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

Второй, более универсальный способ, состоит в использовании оператора return.

Оператор return имеет два назначения: во-первых, немедленный выход из функции, во-вторых, возврат значения в точку вызова. Функция может иметь несколько операторов return, то есть точек выхода из функции может быть несколько.

В функциях, возвращающих значение, оператор return связан со значением выражения, например:

return 0; // возвращается значение константы

В функциях, не возвращающих значения (имеющих тип void), может использоваться оператор return, не связанный с каким-либо выражением:

return; // осуществляется выход из функции

Исполнимый файл программы загружается для выполнения в основную (оперативную) память компьютера. При этом доступная программе память разделяется на четыре области (сегмента). Одна из этих областей отводится под программный код, вторая – под глобальные и статические (объявленные как static) данные программы, третья, организованная по принципу стека, – под локальные переменные ее функций, четвертая – это область динамической памяти, “куча” (heap), которая может быть использована для работы с данными, размер или необходимость которых заранее неизвестны.

Любое объявление переменной в программе предполагает резервирование для нее участка памяти компьютера. Память под глобальные и статические переменные программы резервируется в области данных на все время выполнения программы, под формальные параметры и локальные переменные функции – в стеке на время выполнения этой функции. Количество резервируемых байтов памяти определяется типом данных, указанным в объявлении. Байты памяти компьютера пронумерованы, номера этих байтов принято называть адресами, номер начального байта участка памяти, выделенного для переменной, – адресом переменной.

Правила видимости имен определяют, какие имена “видны” в каждой конкретной точке программы. Каждая функция имеет свою область видимости.

Переменные, определенные вне функций – глобальные переменные, они “видны” во всех функциях программы, расположенных после объявления таких переменных. Переменные эти “живут” столько, сколько и сама программа.

int x; // глобальная переменная

void fn (int a)

{

x = a * a; // изменение значения глобальной переменной x

cout << x;

}

int main ()

{

...

fn (10);

cout << x; // использование значения глобальной переменной x

...

}

Переменные, объявленные внутри функции, называются локальными переменными, они “видны” только в данной функции. Локальные переменные создаются при входе в функцию и уничтожаются при выходе из нее. Поэтому локальные переменные не могут сохранять значения между вызовами функций. Единственным исключением из этого правила являются переменные, объявленные со спецификатором static. Он заставляет компилятор воспринимать данную переменную как глобальную, хотя область видимости по-прежнему ограничена функцией.

Формальные параметры функции (переменные, получающие значения, указанные при вызове этой функции) ведут себя так же, как и обычные локальные переменные, то есть создаются при входе в функцию и уничтожаются при выходе из нее.

Различные функции могут использовать одни и те же имена локальных переменных и формальных параметров.

В функциях могут использоваться имена локальных переменных и формальных параметров, совпадающие с именами глобальных переменных программы. В этом случае внутри функции "приоритет" в использовании имен отдается локальным объявлениям.

Поскольку в C++ не допускается определение функции внутри другой функции, все функции находятся на одном уровне видимости. В каждой функции известна и может быть вызвана любая объявленная ранее (посредством прототипа или определения) функция.




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 392; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.