web-dev-qa-db-fra.com

Retour d'une fonction vide

Quel est le moyen le plus correct de revenir d'une fonction:

void function() {
  // blah some code
}

OR

void function() {
  // blah some code
  return;
}

Justification de la deuxième voie:

  1. Il exprime plus clairement les intentions des développeurs.
  2. Cela permet de détecter la fin de la fonction au moment de la pré-compilation:

Supposons que vous ayez un tel scénario: vous avez un tas de fonctions et vous devez injecter du code à la fin de ces fonctions. Mais pour certaines raisons, vous ne voulez/ou ne pouvez pas modifier une telle quantité de fonctions. Qu'est ce que tu peux faire à propos de ça ? Return & macro entre en jeu, par exemple:

#include<stdio.h>

#define MAX_LINES 1000
#define XCAT(a,b) a##b
#define CAT(a,b) XCAT(a,b)
#define return returns[__LINE__] = 1;\
        if (returns[__LINE__])\
           {printf("End of function on %d line.\n",__LINE__);}\
        int CAT(tmp,__LINE__); \
        if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\
              return

static int returns[MAX_LINES];


void function1(void) {
    return;
}

void function2(void) {
    return;
}

int main()
{
    function1();
    function2();

    return 0;
}
58
Agnius Vasiliauskas

Ni est plus correct, alors faites votre choix. L'instruction vide return; Est fournie pour autoriser une fonction retour dans une fonction void provenant d'un autre endroit que la fin. Aucune autre raison je crois.

58
William Morris

La seule raison d'avoir un retour dans une fonction vide serait de quitter tôt en raison d'une déclaration conditionnelle:

void foo(int y)
{
    if(y == 0) return;

    // do stuff with y
}

Comme dit dérouler: quand le code se termine, il se termine. Pas besoin d'un retour explicite à la fin.

55
Tevo D

Le premier moyen est "plus correct", quelle intention pourrait-il y avoir à exprimer? Si le code se termine, il se termine. C'est assez clair, à mon avis.

Je ne comprends pas ce qui pourrait prêter à confusion et nécessite des éclaircissements. Si aucune construction en boucle n'est utilisée, que peut-il se passer si la fonction cesse de s'exécuter?

Je serais sévèrement ennuyé par une telle déclaration inutile return inutile à la fin d'une fonction void, car elle ne sert clairement à rien et me donne simplement l'impression que le programmeur d'origine a déclaré: "J'étais confus à propos de ça, et maintenant tu peux l'être aussi! " ce qui n'est pas très gentil.

24
unwind

Une vieille question, mais je répondrai quand même. La réponse à la question posée est que le revenu brut est redondant et doit être laissé de côté.

De plus, la valeur suggérée est false pour la raison suivante:

if (ret<0) return;

Redéfinir un mot réservé C en tant que macro est une mauvaise idée, mais cette suggestion particulière est tout simplement insoutenable, à la fois comme argument et comme code.

1
don provan