Warum verursacht glibcs ​​fclose (NULL) einen Segmentierungsfehler, anstatt einen Fehler zurückzugeben?

Laut Manpagefclose(3):

RÜCKGABEWERT

Nach erfolgreichem Abschluss wird 0 zurückgegeben. Andernfalls,EOF wird zurückgegeben und die globale Variableerrno wird gesetzt, um den Fehler anzuzeigen. In beiden Fällen jeder weitere Zugriff (einschließlich eines weiteren Anrufs anfclose()) zum Stream führt zu undefiniertem Verhalten.

FEHLER

EBADF Der zugrunde liegende Dateideskriptorfp ist ungültig.

Dasfclose() Funktion kann auch fehlschlagen und eingestellt werdenerrno für einen der für die Routinen angegebenen Fehlerclose(2), write(2) oderfflush(3).

Na sicherfclose(NULL) sollte scheitern aber ich erwarte, dass es mit einem zurückkommterrno normalerweise anstatt durch Segmentierungsfehler direkt zu sterben. Gibt es einen Grund für dieses Verhalten?

Danke im Voraus.

UPDATE: Ich werde meinen Code hier einfügen (ich versuche esstrerror(), insbesondere).

FILE *not_exist = NULL;

not_exist = fopen("nonexist", "r");
if(not_exist == NULL){
    printError(errno);
}

if(fclose(not_exist) == EOF){
    printError(errno);
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage