return statement
Завершает текущую функцию и возвращает указанное значение вызывающей функции.
Содержание |
Синтаксис
attr-spec-seq
(необязательно)
return
expression
;
|
(1) | ||||||||
attr-spec-seq
(необязательно)
return
;
|
(2) | ||||||||
| expression | - | выражение, используемое для инициализации возвращаемого значения функции |
| attr-spec-seq | - |
(C23)
опциональный список
атрибутов
, применяемых к оператору
return
|
Объяснение
Если тип выражения отличается от возвращаемого типа функции, его значение преобразуется как если бы присваиванием объекту, тип которого является возвращаемым типом функции, за исключением того, что допускается перекрытие объектных представлений:
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
function
.
|
Выполнение оператора
|
(since 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
инструкции
|