Простая ловушка ошибок в GCC - PullRequest
0 голосов
/ 03 июля 2010

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


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

Ответы [ 3 ]

3 голосов
/ 03 июля 2010

...

В случае сбоя fopen возвращается NULL , поэтому

if (ptr == NULL) {
  do z;
} else {
  do x;
}
1 голос
/ 03 июля 2010

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

#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;
}
1 голос
/ 03 июля 2010

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

#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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...