2010-07-03 4 views
0

Используя GCC, я пытаюсь добавить в эту программу простую логику исключения. В идеале простое «если» будет хорошо работать. Если fopen преуспевает, то x, если он не работает z. Есть ли простой способ сделать это?Простая ошибка в GCC


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

В C, большинство системы и функция стандартной библиотеки имеют определенный код ошибки, что они вернутся, когда они терпят неудачу, и тогда они будут установить глобальные переменные 'errno' к числу, которое точно определяет, что пошло не так. Документация для каждой функции должна указывать, что такое код ошибки, и каковы значения 'errno'. –

ответ

1

Вот способ сделать это, и отчет также сообщение об ошибке:

#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

Но было бы еще лучше: 'const char fname [] =" file.txt ";' и используя fname в двух вызовах функций. Это форма СУХОЙ - не повторяй себя. –

+0

Common. Целью этого кода было быстрое отображение того, как обрабатывать и показывать ошибку, а не книгу о моделях C. – Tarantula

1

Вы могли бы используйте что-то подобное ск состояние и печатает ошибку, если условие не выполнено:

#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; 
}