Типизированной называется функция, которая по окончании своей работы возвращает значение, а нетипизированной (или void -функцией) – функция, которая ничего не возвращает.
Разница в вызове нетипизированной (void) и типизированной функции:
1. Вызов нетипизированной (void) функции выглядит как оператор:
void Func (int A); // объявление функции void main(){ Func (10); // вызов – отдельный оператор программы}2. Вызов типизированной функции является операндом, т.е. частью любого допустимого выражения:
int Func (int A); // объявление функции void main(){ int A, B, C; C = Func (10);// вызов – часть оператора присваивания C = A + B * Func (10);// вызов – часть арифметического выражения if (Func (10) < 100)... // вызов – часть оператора ветвления while (Func (10) > 0)... // вызов – часть оператора цикла}Возврат из нетипизированной функции в вызвавшую ее функцию происходит при выполнении последнего оператора в теле функции или реализуется оператором:
return;Возврат из типизированной функции реализуется оператором:
return выражение;Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции. Функция может содержать несколько операторов return. В этом случае они будут являться частью оператора (или операторов) ветвления, поэтому из нескольких операторов return всегда выполняется только один.
|
|
Примеры:
int f1(){... return 1; } //правильно void f2(){...return 1; } //неправильно, f2 не должна возвращать значение double f3(){...return 1; } //правильно, 1 преобразуется к типу doubleВНИМАНИЕ
Нельзя возвращать из функции указатель (или ссылку) на локальную переменную, поскольку по окончании работы функции она всё равно будет удалена.
Пример:
int* Func (){ int a = 5; return &a; // нельзя!}