Пространства имён
Варианты
Действия

Инструкция return

Материал из cppreference.com

Завершает текущую функцию и возвращает указанное значение в вызвавшую функцию.

Синтаксис

посл-спец-атр(необязательно) return выражение ; (1)
посл-спец-атр(необязательно) return ; (2)
выражение выражение, используемое для инициализации возвращаемого функцией значения
посл-спец-атрq (C23)необязательный список атрибутов, применяемых к инструкции return

Объяснение

1) Вычисляет выражение, завершает текущую функцию и возвращает результат выражения в вызвавшую функцию (возвращённое значение становится значением выражения вызова функции). Допустимо только если тип возвращаемого функцией значения не void.
2) Завершает текущую функцию. Допустимо только если тип возвращаемого функцией значения 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.

Выполнение инструкции return в no-return функции является неопределённым поведением.

(начиная с C11)

Ключевые слова

return

Пример

#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