Инструкция return
Завершает текущую функцию и возвращает указанное значение в вызвавшую функцию.
Синтаксис
посл-спец-атр(необязательно) return выражение ;
|
(1) | ||||||||
посл-спец-атр(необязательно) return ;
|
(2) | ||||||||
| выражение | — | выражение, используемое для инициализации возвращаемого функцией значения |
| посл-спец-атрq | — | (C23)необязательный список атрибутов, применяемых к инструкции return
|
Объяснение
void.void.Если тип выражения отличается от возвращаемого функцией значения, то значение выражения преобразуется, как если бы выполнялось присваивание объекту, чей тип это тип возвращаемого функцией значения, за исключением случая наложения представления объектов:
struct s { double i; } f(void); // функция, возвращающая struct s
union { struct { int f1; struct s f2; } u1;
struct { struct s f3; int f4; } u2; } g;
struct s f(void)
{
return g.u1.f2;
}
int main(void)
{
// g.u2.f3 = g.u1.f2; // неопределённое поведение (наложение в присваивании)
g.u2.f3 = f(); // правильно определённое
}
Если возвращаемый тип это вещественный тип с плавающей точкой, результат может быть представлен в более широком диапазоне и с большей точностью, чем подразумевается новым типом.
Достижение конца функции, возвращающей void, эквивалентно return;. Достижение конца любой другой функции, возвращающей значение, является неопределённым поведением, если результат функции используется в выражении (допускается отбрасывать такое возвращаемое значение). Для main см. функцию main.
|
Выполнение инструкции |
(начиная с C11) |
Ключевые слова
Пример
| Этот раздел не завершён Причина: требуется улучшение |
#include <stdio.h>
void fa(int i)
{
if (i == 2)
return;
printf("fa(): %d\n", i);
} // подразумевается return;
int fb(int i)
{
if (i > 4)
return 4;
printf("fb(): %d\n", i);
return 2;
}
int main(void)
{
fa(2);
fa(1);
int i = fb(5); // возвращаемое значение 4 используется для инициализации i
i = fb(i); // возвращаемое значение 2 используется в правой части присваивания
printf("main(): %d\n", i);
}
Вывод:
fa(): 1
fb(): 4
main(): 2
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 6.8.6.4 Инструкция return (стр. 111-112)
- Стандарт C11 (ISO/IEC 9899:2011):
- 6.8.6.4 Инструкция return (стр. 154)
- Стандарт C99 (ISO/IEC 9899:1999):
- 6.8.6.4 Инструкция return (стр. 139)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 3.6.6.4 Инструкция return
См. также
Документация C++ по инструкции
return |