Namespaces
Variants

return statement

From cppreference.net

Met fin à la fonction actuelle et renvoie la valeur spécifiée à la fonction appelante.

Table des matières

Syntaxe

attr-spec-seq (optionnel) return expression ; (1)
attr-spec-seq (optionnel) return ; (2)
expression - expression utilisée pour initialiser la valeur de retour de la fonction
attr-spec-seq - (C23) liste facultative d' attributs , appliquée à l'instruction return

Explication

1) Évalue l' expression , termine la fonction courante et retourne le résultat de l' expression à l'appelant (la valeur retournée devient la valeur de l'expression d'appel de fonction). Valide uniquement si le type de retour de la fonction n'est pas void .
2) Met fin à la fonction courante. Valide uniquement si le type de retour de la fonction est void .

Si le type de l' expression est différent du type de retour de la fonction, sa valeur est convertie comme par assignation à un objet dont le type est le type de retour de la fonction, sauf que le chevauchement entre les représentations d'objets est autorisé :

struct s { double i; } f(void); // fonction retournant 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; // comportement indéfini (chevauchement dans l'assignation)
   g.u2.f3 = f();     // bien défini
}

Si le type de retour est un type flottant réel, le résultat peut être représenté avec une plage et une précision supérieures à celles impliquées par le nouveau type.

Atteindre la fin d'une fonction retournant void équivaut à return ; . Atteindre la fin de toute autre fonction retournant une valeur est un comportement indéfini si le résultat de la fonction est utilisé dans une expression (il est permis d'ignorer une telle valeur de retour). Pour main , voir main function .

Exécuter l'instruction return dans une fonction no-return est un comportement indéfini.

(depuis C11)

Mots-clés

return

Exemple

#include <stdio.h>
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // retour implicite ;
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);   // la valeur de retour 4 utilisée pour initialiser i
    i = fb(i);       // la valeur de retour 2 utilisée comme membre droit d'assignation
    printf("main(): %d\n", i);
}

Sortie :

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

Références

  • Norme C17 (ISO/CEI 9899:2018):
  • 6.8.6.4 L'instruction return (p: 111-112)
  • Norme C11 (ISO/IEC 9899:2011):
  • 6.8.6.4 L'instruction return (p: 154)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 6.8.6.4 L'instruction return (p: 139)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 3.6.6.4 L'instruction return

Voir aussi

Documentation C++ pour return statement