Понятие о функциях в С++

Программа на C++ состоит из функций. Обязательная функция -- main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Объявлений может быть несколько, а определение только одно. Объявление функции делается раньше вызова, чтобы компилятор проверил правильность вызова.

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

Определение функции содержит, тело функции, включающее в себя операторы и описания в фигурных скобках:
[ класс ] тип имя ( [ список_параметров ]) [throw ( исключения ) ] 
{ тело функции }
Составные части определения функции:
• Необязательный модификатор класс может явно задать область видимости функции, используя ключевые слова extern и static
• extern — глобальная видимость во всех модулях программы (по умолчанию);
• static — видимость только в пределах модуля, в котором определена функция.
• Тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void.
• Список параметров определяет величины, которые надо передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя (в объявлении имена можно опускать).

В определении, объявлении и при вызове функции типы и порядок параметров должны совпадать.

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

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

Использование inline-функций может увеличить объем исполняемой программы. Определение функции должно предшествовать ее вызовам, иначе вместо inline-расширения компилятор сгенерирует обычный вызов.

Типы возвращаемого значения и параметров совместно определяют тип функции.

Для вызова функции в простейшем случае нужно указать ее имя, за которым в круглых скобках через запятую перечисляются имена передаваемых аргументов.

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

Если тип возвращаемого функцией значения не void, она может входить в состав выражений или, в частном случае, располагаться в правой части оператора присваивания.

Пример. Функция, возвращает сумму двух целых величин.
#include  
int sum(int a, int b) ; // объявление функции 
int main(){ 
int a = 2, b = 3, c,d; 
с = sum(a,b); // вызов функции 
cin >> d; 
cout << sum(c, d); // вызов функции
return 0; 
} 
int sum(int а, int b){ // определение функции 
return (а + b); 
}
Величины, описанные внутри функции и ее параметры, являются локальными.

При выходе из функции участок стека освобождается, поэтому значения локальных переменных между вызовами одной и той же функции не сохраняются. Чтобы этого избежать, при объявлении локальных переменных используется модификатор static:
#include  
void f(int a){ 
int m = 0; 
cout << "n m p\n"; 
while (a--){ 
static int n = 0; 
int p = 0; 
cout << n++ << ' ' << m++ << ' ' << P++ << '\n'; 
} 
} 
int main(){ f(3); f(2); return 0;}
Пояснения.

Статическая переменная n размещается в сегменте данных и инициализируется один раз при первом выполнении оператора, содержащего ее определение. Авто­матическая переменная m инициализируется при каждом входе в функцию. Авто­матическая переменная р инициализируется при каждом входе в блок цикла.

Программа выведет на экран:
n m р 
0 0 0 
1 1 0 
2 2 0
n m р 
3 0 0 
4 1 0
Онлайн всего: 3
Гостей: 3
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте