3 Stimmen

Warnung für Benutzer, wenn deaktivierte Bibliotheksfunktionen in einer C++-Vorlagenbibliothek verwendet werden

Wir haben eine C++-Vorlagenbibliothek, die einige Funktionen hat, die zum Beispiel von zlib abhängen. Wir aktivieren und deaktivieren selektiv Funktionen mit Hilfe von Präprozessorsymbolen, d.h. wir setzen -DHAVE_ZLIB=1 in der Befehlszeile.

Unser CMake-basiertes Build-System erkennt die installierte zlib und fügt dem Compiler das entsprechende Flag hinzu. Natürlich kann dies auch manuell von den Benutzern mit ihrer bevorzugten IDE oder ihren Makefiles durchgeführt werden.

Eine Eigenschaft der Bibliothek ist, dass der Code, der zlib verwendet, mit dem Code, der zlib nicht verwendet, verschachtelt ist, d. h. mit #include <library/header.h> sollte unabhängig davon funktionieren, ob zlib vorhanden ist oder nicht.

Derzeit sind wir #if aus Code, der von zlib abhängt. Wenn der Benutzer also versucht, etwas zu verwenden wie CompressedStream wird die Klasse zum Beispiel einfach nicht gefunden. Das ist für die Benutzer ziemlich frustrierend. Das Build-System warnt sie, dass zlib nicht gefunden werden konnte, aber Benutzer sind Benutzer und sehen das entweder nicht oder vergessen es schnell. Ich selbst bin auch schon in diese Falle getappt.

Nun zu meiner Frage: Was ist der beste Weg, um den Benutzer zu warnen, dass zlib deaktiviert ist, wenn er versucht, Code zu verwenden, der zlib benötigt.

Das Einzige, was mir einfällt, ist die Verwendung der in vielen Compilern implementierten Mechanismen zur Markierung von Fehlern. Obwohl für jeden von ihnen eine andere Syntax erforderlich ist, könnte dies leicht durch Präprozessormakros abstrahiert werden. Gibt es eine andere gute Möglichkeit?

Die Lösung muss nur in VS >8, GCC >4.2 und LLVM funktionieren.

2voto

arrowd Punkte 31607

Der richtige Ort, um Benutzer vor solchen Dingen zu warnen, ist (IMO) das Build-System. Schauen Sie sich Ogre3D, KDE und viele andere Projekte an - sie alle geben nach der Konfiguration des Builds eine Art Umriss aus. Diese Übersicht enthält Informationen darüber, was gefunden wird und was nicht und was die Konsequenzen davon sind.

Selbst Qt tut nichts, um dies zu beheben. Es gibt die Option, Qt mit STL-Unterstützung zu bauen, und wenn es nicht auf diese Weise gebaut wird, gibt es keine Warnungen oder was auch immer, nur Kompilierfehler in Bezug auf undefinierte Methoden. Ich denke also, es gibt keine Möglichkeit, den Benutzer während der Kompilierungsphase vor solchen Dingen zu warnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X