Pourquoi ne devrais-je pas utiliser la fonction de sortie en C?

J’ai réalisé un projet scolaire et j’ai utilisé cette fonction pour les sorties d’erreur:

void errorMsg(char* msg) { fprintf(stderr, msg); exit(EXIT_FAILURE); } 

Donc je peux faire quelque chose comme ça:

 if (condition) errorMsg("Error, Wrong parameters."); 

Un message sera affiché à l’utilisateur et le programme se terminera avec un code d’erreur.

Mais j’ai reçu moins de points pour utiliser la fonction de exit .

Alors je me demandais comment je devrais le faire? Y at-il un autre moyen que d’écrire ceci plusieurs fois dans la fonction principale?

 if (condition) { fprintf(stderr, "Error, Wrong parameters."); return(EXIT_FAILURE); } 

Merci pour votre temps.

    Cela dépend vraiment de la façon dont vous programmez, ou dans ce cas, de la façon dont votre enseignant souhaite que vous programmez.
    Dans ce cas, la meilleure solution consiste à demander à votre professeur une explication de la raison pour laquelle cela est faux.

    Lorsque je programme en C, toutes mes fonctions renvoient toujours int (ou une typedef de int ) et je peux alors renvoyer les erreurs des fonctions. Ensuite, ma fonction main renvoie une erreur lorsqu’elle revient. Quelque chose comme ce modèle:

     int func(void) { int return_value = 0; if (/* Some condition */) { return_value = 1 } /* Some code */ return return_value; } int main(void) { int return_value = 0; return_value = func(); return return_value } 

    En utilisant ce modèle, s’il y avait une erreur, 1 serait renvoyé de la fonction main et en cas de succès, 0 serait renvoyé. De même, vous pouvez append une condition if dans la fonction main pour vérifier la valeur de retour de func . Cela vous donne la possibilité de gérer les erreurs dans votre code.

    Une raison importante:
    Si vous avez du code qui a ouvert des fichiers, mais pas encore fini, et que ce morceau de code délègue du travail à une fonction qui terminera le programme, que se passera-t-il?
    Bon, vous aurez un fichier cassé.
    Le même raisonnement est valable pour la mémoire allouée, les poignées ouvertes de tous types, etc.etc.

    Au lieu de penser à chaque fois que la fonction peut mettre fin au programme, n’écrivez pas de telles fonctions en premier lieu. Peu importe si tout va bien ou pas, mais retournez le “contrôle” après une fonction à l’appelant à chaque fois. Le seul endroit où la exit pourrait être correcte est Main, car il fera fondamentalement la même chose qu’un retour. Et en gros, il n’ya aucune raison de ne pas écrire le return en premier lieu.

    Mon opinion est que les fonctions de sortie sont plus difficiles à tester. J’ai eu beaucoup de mal à tester une fonction qui a un appel de sortie.