ich von # raten bin, dass es nur ein Compiler-Programm ist. Wie kann es in C/C++ - Programmen verwendet werden?Wie funktioniert #error in C/C++?
Habe nicht viel darüber im Internet gefunden. Alle Links wären hilfreich.
ich von # raten bin, dass es nur ein Compiler-Programm ist. Wie kann es in C/C++ - Programmen verwendet werden?Wie funktioniert #error in C/C++?
Habe nicht viel darüber im Internet gefunden. Alle Links wären hilfreich.
Es verursacht den Compiler (oder Präprozessor), die Fehlermeldung auszugeben. In C++ rendert es auch die Übersetzungseinheit schlecht ausgebildet (d. H. Sie bewirkt, dass die Kompilierung fehlschlägt).
Wenn Sie mehrere Makros, die definiert werden könnten, und Sie wollen sicher sein, dass nur bestimmte Kombinationen von ihnen definiert sind, können Sie #error
verwenden Kompilierung fehlschlagen, wenn eine ungültige Kombination definiert ist.
Es kann auch nützlich sein, wenn Sie sicher sein wollen, dass einige Code-Blöcke nie kompiliert werden (aus welchen Gründen auch immer). Hier
ist ein Link auf die Dokumentation des Gnu Präprozessor Erläuterung der #error
und #warning
Richtlinien: http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html
Insbesondere:
Die Richtlinie
#error
die Präprozessor wird einen fatalen Fehler zu melden. Die Token, die den Rest der Zeile nach#error
bilden, werden als die Fehlermeldung verwendet.
Siehe auch this question über die Portabilität dieser Richtlinien.
Die' # error' Richtlinie ist Teil der C und C++ Standards und ist vollständig tragbar. '# warning' ist eine gcc-spezifische Spracherweiterung. –
@james, danke für die Klarstellung. – UncleZeiv
Dies ist nützlich, um Compilereinstellungen zu überprüfen und Makrowertkombinationen zu überprüfen. Einige zufällige Beispiele:
#if !defined(_DLL)
# error This code will only work properly when compiled with /MD
#endif
#if _WIN32_WINNT < 0x502
# error Sorry, Windows versions prior to XP SP2 are not supported
#endif
#if defined(_APPLE) && defined(_LINUX)
# error Conflicting operating system option selected, choose one.
#endif
Behandelst du den letzten wirklich in der Praxis? Ist es nicht die Verantwortung des Benutzers, nicht braindead zu sein und keine unsinnigen Compiler-Flags zu verwenden? Sie können nicht * alles überprüfen * ... – Thomas
Es ist nur ein Beispiel. Sie neigen dazu, dieses Zeug hinzuzufügen, wenn Sie einen Support-Anruf zu viele haben. Boost ist zum Beispiel weit verbreitet. –
, was Sie meinen damit „nur bestimmte Kombinationen von Makros definiert“. Können Sie ein Beispiel zitieren? Vielen Dank. – Moeb
@cambr: Wenn Sie zum Beispiel zwei Makros 'DO_X' und' DO_Y' haben und sicherstellen wollen, dass immer nur eins gesetzt ist, können Sie eine '# error' Direktive in ein '#if (definiertes DO_X) && (definiert DO_Y) 'Block. –
@cambr: Sagen Sie Ihrem Unternehmen Slicer ™ und Dicer ™ verkauft. Beide Produkte verwenden 'blade.c', aber sie übergeben verschiedene Makros durch das Build-System für etwas andere Funktionalität. Dann könnten Sie '#if SLICING ... #elif DICING ... #else #error Keine von makefile.' ausgewählten Funktionalität – Potatoswatter