Spec-Zone.ru › C

Оператор return

Прерывает выполнение текущей функции и возвращает указанное значение вызывающей функции.

Синтаксис

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

Объяснение

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

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

(с C11)

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

return

Пример

#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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API