"implizite Deklaration der Funktion "fcloseall' ist ungültig in C99" beim kompilieren zu gnu99

Betrachten Sie den folgenden C-code:

#include <stdio.h>
#include <stdlib.h>

void fatal(const char* message){
 /*
  Prints a message and terminates the program.
  Closes all open i/o streams before exiting.
 */
 printf("%s\n", message);
 fcloseall();
 exit(EXIT_FAILURE);
}

Ich bin mit clang 2.8 kompilieren: clang -Wall -std=gnu99 -o <executable> <source.c>

Und erhalten: implicit declaration of function 'fcloseall' is invalid in C99

Das stimmt zwar, aber ich bin explizit kompilieren zu gnu99 [, die Sie unterstützen sollten, fcloseall()], und nicht zu c99.
Obwohl der code ausgeführt, ich weiß nicht, wie zu haben, der nicht aufgelösten Warnungen beim kompilieren.
Wie kann ich dieses Problem lösen?

Bearbeiten: korrigiert tipo.

Ich Schnitt und klebte Ihren code ein und bekam einen erwarteten link-Fehler über main nicht definiert wird, aber keine implizite Deklaration Fehler. Sind Sie sicher, dass Sie Ihre Fehler aus der version von dem code, den du gezeigt hast?
Was passiert, wenn Sie erklären es selbst? I. e. setzen int fcloseall(void); irgendwo.
Es gibt absolut keinen Grund zu nennen fcloseall. Es ist eine nutzlose Nichtstandard-Funktion. exit schon sicher schließt alle geöffneten Dateien, und wenn Ihr Programm endet mit _Exit oder exec stattdessen fflush(NULL) wird bündig alle Dateien, die ist genauso gut und Normen-konform.
Ok, das ist nützlich, Informationen -vielen Dank. Ich werde sich mein code entsprechend.

InformationsquelleAutor Emanuel Ey | 2011-01-13

Schreibe einen Kommentar