Namespaces
Variants

return statement

From cppreference.net

Termina la función actual y retorna el valor especificado a la función llamadora.

Contenidos

Sintaxis

attr-spec-seq (opcional) return expression ; (1)
attr-spec-seq (opcional) return ; (2)
expression - expresión utilizada para inicializar el valor de retorno de la función
attr-spec-seq - (C23) lista opcional de atributos , aplicada a la sentencia return

Explicación

1) Evalúa la expresión , termina la función actual y devuelve el resultado de la expresión al llamador (el valor devuelto se convierte en el valor de la expresión de llamada a función). Solo es válido si el tipo de retorno de la función no es void .
2) Finaliza la función actual. Solo es válido si el tipo de retorno de la función es void .

Si el tipo de la expresión es diferente del tipo de retorno de la función, su valor es convertido como si fuera mediante asignación a un objeto cuyo tipo es el tipo de retorno de la función, excepto que se permite el solapamiento entre representaciones de objetos:

struct s { double i; } f(void); // función que retorna 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; // comportamiento indefinido (solapamiento en asignación)
   g.u2.f3 = f();     // bien definido
}

Si el tipo de retorno es un tipo de punto flotante real, el resultado puede representarse con mayor rango y precisión de lo que implica el nuevo tipo.

Alcanzar el final de una función que retorna void es equivalente a return ; . Alcanzar el final de cualquier otra función que retorna un valor es comportamiento indefinido si el resultado de la función se utiliza en una expresión (se permite descartar dicho valor de retorno). Para main , consulte main function .

Ejecutar la sentencia return en una función no-return es comportamiento indefinido.

(desde C11)

Palabras clave

return

Ejemplo

#include <stdio.h>
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // retorno implícito;
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);   // el valor de retorno 4 se usa para inicializar i
    i = fb(i);       // el valor de retorno 2 se usa como lado derecho de la asignación
    printf("main(): %d\n", i);
}

Salida:

fa():   1
fb():   4
main(): 2

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 6.8.6.4 La sentencia return (p: 111-112)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 6.8.6.4 La sentencia return (p: 154)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 6.8.6.4 La sentencia return (p: 139)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 3.6.6.4 La sentencia return

Véase también

Documentación de C++ para return statement