Kann der C-Präprozessor erkennen, ob eine Header-Datei nicht gefunden werden kann, und eine bestimmte Warnung ausgeben?

8

Ich habe eine C Datei, die eine bestimmte Header-Datei benötigt. Wenn diese Headerdatei nicht existiert, möchte ich, dass der Präprozessor eine bestimmte Warnung ausgibt. Etwas wie:

%Vor%

Ist das mit dem C Präprozessor möglich?

    
Robert Martin 22.02.2012, 20:55
quelle

4 Antworten

9

Sie könnten immer überprüfen, ob das Makro #define X aus der enthaltenen Datei ... definiert ist:)

    
IProblemFactory 22.02.2012, 20:57
quelle
13
Ich weiß, das ist eine alte Frage, aber ich brauchte auch einen Weg, dies zu tun, und ich war enttäuscht, als ich diese Antworten las. Es stellt sich heraus, dass clang eine nette __has_include("header name") Direktive hat, die einwandfrei funktioniert, um das zu tun, was du brauchst :) Vielleicht möchten Sie zuerst prüfen, ob die Direktive verfügbar ist, indem Sie #if defined(__has_include)

aufrufen     
Vik 28.03.2014 10:04
quelle
7

Nein, das ist nicht möglich. Alles, was Sie tun können, ist #include den Header zu versuchen, und wenn es nicht existiert, wird der Compiler Ihnen einen Fehler geben.

Eine Alternative wäre ein Tool wie GNU autoconf . autoconf erzeugt ein Shell-Skript namens configure , das Ihr Build-System analysiert und feststellt, ob bestimmte Header-Dateien installiert sind oder nicht, und es generiert eine Header-Datei, die aus Makros besteht, die diese Informationen anzeigen.

Zum Beispiel könnte es HAVE_SYS_TIME_H definieren, wenn Ihr Build-System den Header <sys/time.h> enthält, so dass Sie dann Code schreiben können wie:

%Vor%     
Adam Rosenfield 22.02.2012 21:01
quelle
-4

Wenn Sie lediglich eine Warnung benötigen, dass die Header-Datei nicht vorhanden ist (und keinen benutzerdefinierten Code), geben Ihnen die meisten Compiler bereits eins.

%Vor%     
jørgensen 23.02.2012 00:08
quelle

Tags und Links