Как уже говорили другие, вы хотите вернуть указатель в любом случае, потому что ваша функция объявлена как возвращающая FILE *
. Таким образом, вы должны вернуть NULL
, если fopen()
не удалось, и возвращаемое значение fopen()
, если это не так.
Но тогда ваша функция (почти) эквивалентна fopen()
! Другими словами, вы можете заменить свою функцию на:
FILE* my_open_file(char* filename)
{
FILE *fp = fopen(filename);
if (fp == NULL) {
fprintf(stderr, "Unable to open file %s", filename);
perror(NULL);
}
return fp;
}
fopen()
не гарантирует установки errno
, поэтому я добавил вызов fprintf()
с именем файла в дополнение к вызову perror()
. Кроме того, в сообщениях об ошибках рекомендуется не указывать имя файла, если файл не открывается.