2010-07-03 4 views
0

En utilisant GCC, j'essaye d'ajouter la logique d'exception simple à ce programme. Idéalement, un simple «si» fonctionnerait bien. Si le fopen réussit, alors faites x, en cas d'échec, faites z. Y a-t-il un moyen simple de le faire?Piège d'erreur simple dans GCC


#include <stdio.h> 
main() 
{ 
    FILE *ptr; 
    ptr = fopen("c:\\RedyBoot.bat","r"); 
    fclose(ptr); 
    return 0; 
} 
+0

En C, la plupart des systèmes et fonctions de la bibliothèque standard ont un code d'erreur spécifique qu'ils reviendront quand ils échouent, et ils la variable globale 'errno' à un nombre qui spécifie exactement ce qui s'est mal passé. La documentation de chaque fonction doit indiquer le code d'erreur et les valeurs de 'errno'. –

Répondre

1

Voici une façon de le faire et le rapport a également le message d'erreur:

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    FILE *handle; 
    errno = 0;      
    handle = fopen("file.txt", "r"); 
    if (!handle) 
    { 
    fprintf (stderr, "Cannot open file %s, error: %s", 
      "file.txt", strerror (errno)); 
    exit (-1); 
    } 
} 
+1

Mais ce serait encore mieux avec: 'const char fname [] =" file.txt ";' et en utilisant fname dans les deux appels de fonction. C'est une forme de DRY - Ne vous répétez pas. –

+0

Commun .. l'objectif du code était de montrer rapidement comment gérer et montrer l'erreur, pas un livre sur les modèles C. – Tarantula

1

Vous pourriez utiliser quelque chose comme ça pour che ck l'état et imprimer une erreur si la condition est pas remplie:

#include <stdlib.h> 
#include <stdio.h> 

#define CHECK(x) \ 
    do { \ 
     if (!(x)) { \ 
      fprintf(stderr, "%s:%d: ", __func__, __LINE__); \ 
      perror(#x); \ 
      exit(-1); \ 
     } \ 
    } while (0) 

int main() 
{ 
    FILE *file = fopen("my_file.txt", "r"); 
    CHECK(NULL != file); 
    fclose(file); 
    return 0; 
}