Fehlerbehandlung beim Öffnen der Datei

[Frage 1]

Wenn ich eine Datei in eine Funktion öffne, mache ich im Allgemeinen Folgendes:

int read_file (char *filename)
{
    FILE *fin;

    if ( !(fin = fopen(filename, "r")) )
        return 1;

    /* ... */

    return fclose(fin);
}

int main ()
{
    char filename[100];

    if ( read_file(filename) )
    {
        perror(filename);
        exit(1);
    }

    return 0;
}

Allgemein0 Rückgabewert ist für Fehler (oder?), dann kann ich den vorherigen Code ändern in:

int read_file (char *filename)
{
    FILE *fin;

    if ( !(fin = fopen(filename, "r")) )
        return 0;

    /* ... */

    return !fclose(fin);
}

int main ()
{
    char filename[100];

    if ( !read_file(filename) )
    {
        perror(filename);
        exit(1);
    }

    return 0;
}

Aber ich denke, dass der erste Code sauberer ist.

Andere Option ist nur Veränderungreturn 1; inreturn -1; (Im ersten Code, den ich geschrieben habe).

Was ist die beste Version?

[Frage 2]

Wenn ich mehr Fehler behandeln muss, korrigiert es einen Code wie diesen?

int read_file (char *filename, int **vet)
{
    FILE *fin;

    if ( !(fin = fopen(filename, "r")) )
    {
        perror(filename);
        return 1;
    }

    * vet = malloc (10 * sizeof(int));
    if ( *vet == NULL )
    {
        perror("Memory allocation error.\n");
        return 1;   
    }

    /* ... */

    return fclose(fin);
}

int main ()
{
    char filename[100];
    int *vet;

    if ( read_file(filename, &vet) )
        exit(1);

    return 0;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage