Supposons que j'utilise fopen et que je considère que le format de fichier n'est pas valide pour mon programme ou que le pointeur est NULL. Quelles conséquences y a-t-il à renvoyer simplement EXIT_FAILURE lorsque j'atteins cette situation, sans utiliser fclose?
3 Réponses :
Il n'y aura aucune conséquence à renvoyer simplement EXIT_FAILURE lorsque le pointeur de fichier est NULL ou que vous codez le format de fichier pour être invalide. Ce serait une simple sortie du programme avec la valeur de retour EXIT_FAILURE. Bien que vous puissiez utiliser la fonction atexit ()
pour nettoyer les ressources à la sortie en cas de besoin.
Le EXIT_FAILURE
est une macro définie dans la bibliothèque stdlib.h
qui se développe en 1
. En revanche, la constante macro EXIT_SUCCESS
se développe en 0
. Dans notre convention générale, renvoyer 0
à la fonction principale indique que le code s'est exécuté avec succès, sinon incorrectement quitté.
Aussi, pour vider les flux et annuler les choses, atexit () fera le travail.
Notez que nous allons utiliser x
globalement depuis la fonction qui va être passée en argument dans atexit () ne doit rien y passer. La signature de fonction de
atexit ()
selon Référence C ++ (en utilisant C déclaration) est la suivante:
#include <stdio.h> #include <stdlib.h> // will be used for atexit() void exit_stuffs(void); // to use return code int x; int main(void) { int a = 4; x = (a < 5) ? EXIT_FAILURE : EXIT_SUCCESS; atexit(&exit_stuffs); return x; } void exit_stuffs(void) { printf("The return code was: %d\n", x); }
Supposons le programme suivant:
int atexit (void (*func)(void));
Cela attribuera EXIT_FAILURE à x
puis renvoyer x
. A la sortie du programme, un exemple d'utilisation de atexit ()
est également donné.
Quelles conséquences y a-t-il à renvoyer simplement EXIT_FAILURE lorsque j'atteins cette situation, sans utiliser fclose?
Aucune, à une exception près: si vous écriviez dans le fichier, certaines données seront perdues. C'est à peu près tout, et peu importe ce que vous retournez - EXIT_FAILURE
n'est en aucun cas spécial sur les systèmes d'exploitation classiques.
Revenir depuis
main
équivaut à appelerexit
. Certaines des choses à faire sont de vider les flux avec des données non écrites, de fermer tous les flux et de supprimer tous les fichiers créés avectmpfile
.