Возвращение значения функцией: оператор return.
Приведем наш драйвер и функцию, вычисляющую абсолютную величину числа:
/* abs.драйвер */
#include<stdio.h>
int abs(int );
void main()
{
int a= 10, b= 0, c= -22;
int d, e, f;
d = abs(a);
e = abs(b);
f = abs(c);
printf(" %d %d %d\n", d, e, f);
}
/* функция, вычисляющая величину числа */
int abs(int x)
{
int y;
y = (x < 0) ? - x : x; /*вспомните операцию ? : */
return (y); /* возвращает значение у вызывающей программе */
}
Результат работы программы выглядит так:
10 0 22
Ключевое слово return указывает на то, что значение выражения, заключенного в круглые скобки, будет присвоено функции, содержащей это ключевое слово. Поэтому, когда функция abs() впервые вызывается нашим драйвером, значением abs(a) будет число 10, которое затем присваивается переменной d.
Переменная у является внутренним объектом функции abs(), но значение у передается в вызывающую программу с помощью оператора return. Действие, оказываемое оператором
d = abs(a);
по-другому можно выразить так:
abs(a);
d = у;
Оператор return оказывает и другое действие. Он завершает выполнение функции и передает управление следующему оператору в вызывающей функции. Это происходит даже в том случае, если оператор return является не последним оператором тела функции. Следовательно, функцию abs() мы могли бы записать следующим образом:
/* функция, вычисляющая абсолютную величину числа, вторая версия */ abs(x) int x; { if (x < 0) return(-x); else return(x); } |
Наличие оператора return препятствует тому, чтобы оператор печати printf() когда-нибудь выполнился в программе. Вы можете также использовать просто оператор
return; |
Его применение приводит к тому, что функция, в которой он содержится, завершает свое выполнение и управление возвращается в вызывающую функцию. Поскольку у данного оператора отсутствует выражение в скобках, никакое значение при этом не передается функции.
83. Использование функций. Типы функций. Функции типа void. Функции типа char. Функции типа int.
Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи.
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.
Сигнатура функции определяет правила использования функции. Обычно сигнатура представляет собой описание функции, включающее имя функции, перечень формальных параметров с их типами и тип возвращаемого значения.
Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.
Определение функции
Каждая функция в языке Си должна быть определена, то есть должны быть указаны:
· тип возвращаемого значения;
· имя функции;
· информация о формальных аргументах;
· тело функции.
Определение функции имеет следующий синтаксис:
ТипВозвращаемогоЗначения ИмяФункции(СписокФормальныхАргументов)
{
ТелоФункции;
...
return(ВозвращаемоеЗначение);
}
Пример: Функция сложения двух вещественных чисел
float function(float x, float z)
{
float y;
y=x+z;
return(y);
}
Объявление функций: прототипы функций
1 | returnDataType functionName( dataType argName1, dataType argName2, ..., dataType argNameN); |
где,
returnDataType — возвращаемый тип данных
functionName — имя функции
dataType — тип данных
argName1...N — имена параметров функции (количество параметров неограниченно)
Смотрим пример объявления функции:
|
В языках C и C++, функции должны быть объявлены до момента их вызова. Вы можете объявить функцию, при этом функция может возвращать значение или — нет, имя функции присваивает программист, типы данных параметров указываются в соответствии с передаваемыми в функцию значениями. Имена аргументов, при объявления прототипов являются необязательными:
1 | int sum(int , int ); // тот же прототип функции |
Иногда, объявление функции называют определением функции, хотя это не одно и то же.
|
Определение функций
|
Рассмотрим определение функции на примере функции sum.
Типы функций.
Тип функции определяется типом возвращаемого ею значения, а не типом ее аргументов. Если указание типа отсутствует, то по умолчанию считается, что функция имеет тип int. Если значения функции не принадлежат типу int, то необходимо указать ее тип в двух местах.
1. Описать тип функции в ее определении:
char pun(ch, n) /* функция возвращает символ */
int n;
char ch;
float raft(num) /* функция возвращает величину типа float */
int num;
2. Описать тип функции также в вызывающей программе.
Описание функции должно быть приведено наряду с описаниями переменных программы; необходимо только указать скобки (но не аргументы) для идентификации данного объекта как функции.
main()
{
char, rch, pun();
float raft;
Запомните! Если функция возвращает величину не типа int, указывайте тип функции там, где она определяется, и там, где она используется.