Возвращение значения функцией: оператор 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 — имена параметров функции (количество параметров неограниченно)

Смотрим пример объявления функции:

 
1 2 3 / / Объявление прототипа функции с двумя целыми параметрами / / функция принимает два аргумента и возвращает их сумму int sum(int num1, int num2);

 

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

1 int sum(int , int ); // тот же прототип функции

Иногда, объявление функции называют определением функции, хотя это не одно и то же.

 

1 2 3 4 returnDataType functionName( dataType argName1, dataType argName2, ..., dataType argNameN) { // тело функции }

 

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

 

 
1 2 3 4 5 // определение функции, которая суммирует два целых числа и возвращает их сумму int sum(int num1, int num2) { return (num1 + num2); }

 

Рассмотрим определение функции на примере функции 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, указывайте тип функции там, где она определяется, и там, где она используется.