[programmation][C][sortie prematuree]

Fermé
touns - 26 oct. 2009 à 18:29
 loupius - 27 oct. 2009 à 02:46
Bonjour,
en fait, jappelle une fonction dans une autre fonction et je souhaiterais quitter la fonction principal en etant dans la fonction que jappelle.
vous nauriez pas une solution pr moi svp??
A voir également:

2 réponses

Absurde, il ne faut surtout pas penser à ce genre de chose.
De toutes façons, à moins d'une délicate intervention directe sur la pile en assembleur, c'est impossible !
Il faut trouver un autre manière, peut-être avec l'aide de thread...
Bonne réflexion.
0
Pacorabanix
26 oct. 2009 à 20:16
ça dépend, il y a une solution : prévoir dans la fonction imbriquée le cas où tu veux qu'elle interrompe, il faut que la fonction imbriquée renvoie une certaine valeur "sentinelle" que la fonction qui appelle teste à la fin, et quitte si elle la détecte.


Ex. : une fonction qui renvoie habituellement un nombre positif rencontre une erreur. Tu sais que dans cette fonction tu peux avoir une erreur, et alors il faut que la fonction qui appelle celle ci quitte.
const int CODE_ERREURFONCTION = -1;   // c'est plus clair dans le code si on fait ça
//sinon on peut mettre les -1 directement, mais risque de bug et de confusion.

void FaitUnTruc() {

   //blabla
   Resultat = TrouveUnTruc;
   if (Resultat==CODE_ERREURFONCTION) return;  //le test qui fait quitter au cas où il y a  un truc qui va pas.

   // blabla : ce qu'il faut faire ensuite s'il n'y a pas d'erreur.
}

int TrouveUnTruc() {

    //blabla (une boucle par exemple
         if (erreur==true) return CODE_ERREURFONCTION;  //quelque part dans la boucle

    // blabla plus loin

    return valeur;
}



Par contre, je n'ai pas bien compris si tu voulais que la fonciton extérieure quitte mais que la fonction imbriquée continue... ça ce n'est pas possible, peut être avec les threads mais de toute façon ça ne me parait pas propre et propice à des très gros bugs.
0
Par contre, je n'ai pas bien compris si tu voulais que la fonciton extérieure quitte mais que la fonction imbriquée continue Oui c'est justement ce cas qu'il veut traiter; en étant dans une fonction, il veut que la fonction qui l'a appellé s'arrête. Il ne sait sans doute pas ce qu'est une pile et que les appels s'empilent pour se dépiler lors des retours; si on veut supprimer la fonction appellante, le seul moyen est de supprimer son retour de la pile, mais il faudra, éventuellement, supprimer aussi les paramètres passés à cette fonction; et il ne faudra pas oublier non plus que la fonction dans laquelle il se trouve devra retourner une valeur de même nature que celle qui aurait été retournée par la fonction supprimée. En clair, c'est quasiment inextricable !

En passant, méfie-toi que dans la fonction TrouveUnTruc, la valeur retournée ne soit pas justement égale à CODE_ERREURFONCTION, ce qui pourrait provoquer une erreur parfois difficilement décelable; c'est ce qu'on appelle 'un effet de bord'. Mais tu sais sans doute que généralement il vaut mieux utiliser la valeur de retour pour tester l'erreur et un paramètre type pointeur ou référence pour récupérer la valeur.
Bonne nuit.
0