1
votes

Que se passe-t-il si retourne EXIT_FAILURE sans utiliser fclose ()?

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?


1 commentaires

Revenir depuis main équivaut à appeler exit . 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 avec tmpfile .


3 Réponses :


0
votes

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.


0 commentaires

0
votes

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é.


0 commentaires

0
votes

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.


0 commentaires