- 06/10/2020
- 4 minutos para leer
-
- c
- n
- M
- g
- S
Un return
comunicado termina la ejecución de una función y devuelve el control a la función de llamada. La ejecución se reanuda en la función de llamada en el punto inmediatamente posterior a la llamada. Una instrucción return
puede devolver un valor a la función que llama. Para obtener más información, consulte Tipo de retorno.
Sintaxis
instrucción de salto:
return
expresionopt;
El valor de la expresión, si está presente, se devuelve a la función que llama. Si se omite la expresión, el valor devuelto de la función no está definido. La expresión, si está presente, se evalúa y luego se convierte al tipo devuelto por la función. Cuando una instrucción return
contiene una expresión en funciones que tienen un tipo de retorno void
, el compilador genera una advertencia y la expresión no se evalúa.
Si no aparece la instrucción return
en una definición de función, control vuelve automáticamente a la función que llama después de que se ejecute la última instrucción de la función llamada. En este caso, el valor devuelto de la función llamada no está definido. Si la función tiene un tipo de retorno que no sea void
, es un error grave y el compilador imprime un mensaje de diagnóstico de advertencia. Si la función tiene un tipo de retorno void
, este comportamiento está bien, pero se puede considerar de estilo pobre. Utilice una instrucción return
para aclarar su intención.
Como una buena práctica de ingeniería, especifique siempre un tipo de retorno para sus funciones. Si no se requiere un valor de retorno, declare que la función tiene void
tipo de retorno. Si no se especifica un tipo de retorno, el compilador de C asume un tipo de retorno predeterminado de int
.
Muchos programadores usan paréntesis para encerrar el argumento de expresión de la instrucción return
. Sin embargo, C no requiere los paréntesis.
El compilador puede emitir un mensaje de diagnóstico de advertencia sobre el código inalcanzable si encuentra cualquier instrucción colocada después de la instrucción return
.
En una función main
, la instrucción y expresión return
son opcionales. Lo que sucede con el valor devuelto, si se especifica uno, depende de la implementación. Específico de Microsoft: La implementación de Microsoft C devuelve el valor de expresión al proceso que invocó el programa, como cmd.exe
. Si no se proporciona ninguna expresión return
, el tiempo de ejecución de Microsoft C devuelve un valor que indica éxito (0) o error (un valor distinto de cero).
Ejemplo
Este ejemplo es un programa en varias partes. Muestra la instrucción return
y cómo se usa para finalizar la ejecución de la función y, opcionalmente, para devolver un valor.
// C_return_statement.c// Compile using: cl /W4 C_return_statement.c#include <limits.h> // for INT_MAX#include <stdio.h> // for printflong long square( int value ){ // Cast one operand to long long to force the // expression to be evaluated as type long long. // Note that parentheses around the return expression // are allowed, but not required here. return ( value * (long long) value );}
La función square
devuelve el cuadrado de su argumento, en un tipo más amplio para evitar un error aritmético. Específico de Microsoft: En la implementación de Microsoft C, el tipo long long
es lo suficientemente grande como para contener el producto de dos valores int
sin desbordamiento.
Los paréntesis alrededor de la expresión return
en square
se evalúan como parte de la expresión y no son requeridos por la instrucción return
.
double ratio( int numerator, int denominator ){ // Cast one operand to double to force floating-point // division. Otherwise, integer division is used, // then the result is converted to the return type. return numerator / (double) denominator;}
El ratio
función devuelve el índice de sus dos int
argumentos como de punto flotante double
valor. La expresión return
se ve obligada a usar una operación de punto flotante al lanzar uno de los operandos a double
. De lo contrario, se usaría el operador de división entera, y la parte fraccionaria se perdería.
void report_square( void ){ int value = INT_MAX; long long squared = 0LL; squared = square( value ); printf( "value = %d, squared = %lld\n", value, squared ); return; // Use an empty expression to return void.}
El report_square
llamadas de función square
con un valor del parámetro de INT_MAX
, el mayor valor entero con signo de que quepa en un int
. El resultado long long
se almacena en squared
y luego se imprime. La función report_square
tiene un tipo de retorno void
, por lo que no tiene una expresión en su instrucción return
.
void report_ratio( int top, int bottom ){ double fraction = ratio( top, bottom ); printf( "%d / %d = %.16f\n", top, bottom, fraction ); // It's okay to have no return statement for functions // that have void return types.}
El report_ratio
llamadas de función ratio
con los valores de parámetro de 1
y INT_MAX
. El resultado double
se almacena en fraction
y luego se imprime. La función report_ratio
tiene un tipo de retorno void
, por lo que no necesita devolver explícitamente un valor. La ejecución de report_ratio
«se cae de la parte inferior» y no devuelve ningún valor al llamante.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
El main
llamadas de función de dos funciones: report_square
y report_ratio
report_square
no toma ningún parámetro y devuelve void
, no podemos asignar el resultado a una variable. Del mismo modo, report_ratio
devuelve void
, por lo que tampoco guardamos su valor de retorno. Después de cada una de estas llamadas a funciones, la ejecución continúa en la siguiente instrucción. A continuación, main
devuelve un valor de 0
(que normalmente se usa para informar de éxito) para finalizar el programa.
Para compilar el ejemplo, cree un archivo de código fuente llamado C_return_statement.c
. Luego, copie todo el código de ejemplo, en el orden que se muestra. Guarde el archivo y compílelo en una ventana del símbolo del sistema del desarrollador mediante el comando:
cl /W4 C_return_statement.c
Luego, para ejecutar el código de ejemplo, ingrese C_return_statement.exe
en el símbolo del sistema. La salida del ejemplo se ve así: