Оператор return
Прерывает выполнение текущей функции и возвращает указанное значение вызывающей функции.
Синтаксис
attr-spec-seq(необязательно) return выражение ; | (1) | |
attr-spec-seq(необязательно) return ; | (2) |
| выражение | - | выражение, используемое для инициализации возвращаемого значения функции |
| attr-spec-seq | - | (C23)необязательный список атрибутов, применённых к оператору return |
Объяснение
void.void.Если тип выражения отличается от типа возврата функции, его значение преобразуется как при присваивании объекту типа возврата функции, за исключением того, что перекрытие представлений объектов допустимо:
struct s { double i; } f(void); // function returning 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; // undefined behavior (overlap in assignment)
g.u2.f3 = f(); // well-defined
}Если тип возврата — вещественный тип с плавающей точкой, результат может быть представлен в большем диапазоне и точности, чем предполагает новый тип.
Достижение конца функции, возвращающей void эквивалентно return;. Достижение конца любой другой возвращающей значение функции является неопределённым поведением, если результат функции используется в выражении (разрешено игнорировать такое возвращаемое значение). Для main, см. main функцию.
| Выполнение оператора | (с C11) |
Ключевые слова
Пример
#include <stdio.h>
void fa(int i)
{
if (i == 2)
return;
printf("fa(): %d\n", i);
} // implied 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); // the return value 4 used to initializes i
i = fb(i); // the return value 2 used as rhs of assignment
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 оператора |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/return