- 06/10/2020
- 4 minutos para ler
-
- c
- n
- M
- g
- S
Uma return
instrução termina a execução da função e retorna o controle para a função chamada. A execução recomeça na função de chamada no ponto imediatamente após a chamada. Uma declaração return
pode devolver um valor à função de chamada. Para mais informações, consulte o tipo Return.
Sintaxe
ir-declaração:
return
expressionopt;
O valor da expressão, se presente, é retornado para a função chamadora. Se a expressão for omitida, o valor de retorno da função é indefinido. A expressão, se presente, é avaliada e então convertida para o tipo retornado pela função. Quando uma return
instrução contém uma expressão em funções que tem um void
tipo de retorno, o compilador gera um aviso, e a expressão não é avaliada.
If no return
statement appears in a function definition, control automatically returns to the calling function after the last statement of the called function is executed. Neste caso, o valor de retorno da função chamada é indefinido. Se a função tem um tipo de retorno diferente de void
, é um erro grave, e o compilador imprime uma mensagem de diagnóstico de aviso. Se a função tem um tipo de retornovoid
, este comportamento é bom, mas pode ser considerado um estilo pobre. Use uma simples return
declaração para deixar a sua intenção clara.
Como uma boa prática de engenharia, especifique sempre um tipo de retorno para suas funções. Se não for necessário um valor de retorno, declare que a função tem void
tipo de retorno. Se um tipo de retorno não for especificado, o compilador C assume um tipo de retorno padrão de int
.
muitos programadores usam parênteses para incluir o argumento de expressão do return
afirmação. No entanto, C não requer os parênteses.
O compilador pode emitir uma mensagem de diagnóstico de Aviso sobre o código inacessível se encontrar quaisquer declarações colocadas após a declaração return
.
In amain
function, thereturn
statement and expression are optional. O que acontece com o valor devolvido, se for especificado, depende da implementação. Microsoft-specific: the Microsoft C implementation returns the expression value to the process that invocated the program, such as cmd.exe
. Se não for indicada a expressão return
, a execução Microsoft C devolve um valor que indica sucesso (0) ou falha (um valor não-zero).
exemplo
este exemplo é um programa em várias partes. Ele demonstra oreturn
, e como ele é usado tanto para terminar a execução da função, e opcionalmente, para retornar um 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 );}
o square
função devolve o quadrado do seu argumento, num tipo mais amplo para evitar um erro aritmético. Microsoft-specific: In the Microsoft C implementation, the long long
type is large enough to hold the product of two int
values without overflow.
Os parênteses em torno return
expressão square
são avaliados como parte da expressão, e não são necessários por return
instrução.
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;}
ratio
retorna a relação de seus dois int
argumentos como um ponto flutuante double
valor. The return
expression is forced to use a floating-point operation by casting one of the operands to double
. Caso contrário, o operador da divisão inteira seria usado, e a parte fracionária seria perdida.
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.}
report_square
chamadas de função square
com um valor de parâmetro de INT_MAX
, o maior valor inteiro que se encaixa em um int
. The long long
result is stored in squared
, then printed. The report_square
function has avoid
return type, so it doesn’t have an expression in itsreturn
statement.
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.}
report_ratio
chamadas de função ratio
com o parâmetro valores de 1
e INT_MAX
. The double
result is stored in fraction
, then printed. The report_ratio
function has avoid
return type, so it doesn’t need to explicitly return a value. Execução de report_ratio
“cai do fundo” e não devolve nenhum valor à pessoa que ligou.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
main
chamadas de função de duas funções: report_square
e report_ratio
. Como report_square
não toma parâmetros e devolve void
, não atribuímos o seu resultado a uma variável. Da mesma forma, report_ratio
devolve void
, por isso também não guardamos o seu valor de retorno. Após cada uma destas chamadas de função, a execução continua na próxima declaração. Then main
returns a value of0
(typically used to report success) to end the program.
para compilar o exemplo, crie um ficheiro de código-fonte chamado C_return_statement.c
. Em seguida, copie todo o código de exemplo, na ordem mostrada. Salve o arquivo, e compilá-lo em um Desenvolvedor janela de prompt de comando usando o comando:
cl /W4 C_return_statement.c
em Seguida, executar o código de exemplo, digite C_return_statement.exe
no prompt de comando. O resultado do exemplo se parece com este: