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

В отличие от других ЯП в С нет деления на подпрограммы, процедуры и функции.

В языке С программа состоит только из функций.

Функция - независимая совокупность объявлений операторов, обычно предназначенная для выполнения определенной задачи.

Каждая функция должна иметь имя.

main, Winmain, Qumain - функции, с которых начинается программа.

При вызове функции ей могут быть переданы данные посредством аргументов.

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

С использованием функций связано три понятия:

1)Определение функции

2)Объявление функции

3)Вызов функции

Пример:

int IfRus(char c)

{

 if (c>="А" && c<="я") Return 1;

 else Return 0;

}

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

int IfRus(char c)

В прототипе необязательно указывать имена переменных.

Общий формат определения функций:

[спецификатор типа] Имя [(список параметров)]

Если спецификатор типа не используется, то считается, что функция возвращает int

Список параметров - последовательность объявлений формальных параметров, разделенных запятыми.

Формальные параметры - переменные, которые принимают значения, переданные функции во время вызова.

Имя(, …) - у функции переменное число аргументов.

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

Если функция не возвращает значений, то спецификатор типа = void

Общий формат вызова функции:

выражение ([список выражений])

Рекурсивные вызовы.

Любая функция может быть вызвана рекурсивно, то есть она может вызывать саму себя.

Компилятор допускает любое число рекурсивных вызовов. Параметры, предшествующие незавершенным рекурсивным вызовам, недоступны.

long Fact(int n)

{

Return (n<=1)?1: n*Fact(n-1);

}

Вызов функции с переменным числом аргументов.

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

va_start, va_arg, va_end, va_list

 

int average (int first

{

 int count=0, sum=0, i=first;

 va_list marker;

 va_start (marker,first);

 while (i:=-1)

 {

  sum+=i; count++;

  i=va_arg(marker,int);

 }

 va_end(marker); return (sum?(sum/count):0);

}

int A

A=average(1,2,3,4,-1)

Hosted by uCoz