Описание и вызов
Функции
Функции объявляются следующим образом:
[модификаторы] возвращаемый_тип имя_функции (список_формальных_параметров)
{
ТЕЛО ФУНКЦИИ
}
список формальных параметров представляет собой перечисление через запятую пар «тип данного» — «имя переменной» (имя переменной может отсутствовать).
В соответствии со стандартом ANSI C возвращаемый тип int может быть опущен. В C99 и С++ указание типа обязательно.
Для функции, которая не возвращает значения (аналог процедуры в «Паскале»), предусмотрен тип данных void.
Функции, возвращающие значение (возвращаемый тип для которых отличен от void), должны обязательно содержать оператор "return возвращаемые_данные". На данном операторе происходит возврат из функции независимо от того, есть ли дальше другие операторы.
Пример
int sum(int x, int y)
{
return x+y;
}
Для функций типа void можно использовать оператор return без аргументов для явного возврата (выхода) из функции в требуемом месте.
Описание функции обязательно должно быть раньше (выше) в тексте программы, чем любой её вызов. Функция может быть описана без реализации. Такое описание называют «прототип функции» (в литературе также можно встретить термин «упреждающее описание»). В этом случае тело функции не записывают, а после описания её заголовка ставят «;». Также при упреждающем описании можно не указывать имена переменных. Реализация функции должна обязательно присутствовать далее в тексте программы, возможно, в другом файле.
Пример
void myfunc(int, int);
// здесь продолжение кода с вызовом myfunc
void myfunc(int x, int y) {…}
Вызов функции производится через указание её имени и последующего списка фактических параметров в скобках. Можно говорить, что признаком вызова функции являются круглые скобки. Имя функции без последующих скобок хранит её адрес и может участвовать в выражениях в качестве указателя.
Пример
void myfunc(int a,int b) //описание
{...}
int main(void)
{
…
myfunc(x,5); //вызов
void *t = myfunc; //применение в качестве указателя
…
}
Допустимо явно не указывать параметры функции, для этого используется многоточие в конце списка параметров. В этом случае компилятор контролирует только явно указанные аргументы. Никаких специальных базовых средств по работе с неявно указанными параметрами функции языки «С» и «С++» не предоставляют, но известно, что переданные фактические параметры располагаются в памяти (в стеке) последовательно после явно указанных.
Функции и типы данных для работы с неявно заданными параметрами определены в библиотеке stdarg.h.
Примером функции с неявно заданными параметрами является printf.