Vom Gnu cpp Handbuch ...
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
Diese Makros von allen GNU-Compiler definiert werden, die den C-Präprozessor verwenden: C, C++, Objective-C und Fortran. Ihre Werte sind die Hauptversion, Nebenversion und Patch-Ebene des Compilers, als Integer-Konstanten. Zum Beispiel wird GCC 3.2.1 __GNUC__
bis 3, __GNUC_MINOR__
bis 2 und __GNUC_PATCHLEVEL__
zu 1 definieren. Diese Makros werden auch definiert, wenn Sie den Präprozessor direkt aufrufen.
__GNUC_PATCHLEVEL__
ist neu in GCC 3.0; Es ist auch in den weit verbreiteten Entwicklungsschnappschüssen vor 3.0 vorhanden (die sich als GCC 2.96 oder 2.97 identifizieren, je nachdem, welchen Snapshot Sie haben).
Wenn Sie nur wissen müssen, ob Ihr Programm von GCC kompiliert wird, oder ein Nicht-GCC-Compiler, der die GNU C-Dialekte akzeptiert, können Sie einfach __GNUC__
testen. Wenn Sie Code schreiben müssen, der von einer bestimmten Version abhängt, müssen Sie vorsichtiger sein.Jedes Mal, wenn die Minor-Version erhöht wird, wird der Patch-Level auf Null zurückgesetzt; Jedes Mal, wenn die Hauptversion erhöht wird (was selten vorkommt), werden die Minor-Version und die Patch-Ebene zurückgesetzt. Wenn Sie die vordefinierten Makros direkt in der bedingten verwenden möchten, müssen Sie es wie folgt schreiben:
/* Test for GCC > 3.2.0 */
#if __GNUC__ > 3 || \
(__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
(__GNUC_MINOR__ == 2 && \
__GNUC_PATCHLEVEL__ > 0))
mögliche Duplikate von [Wie teste ich die aktuelle Version von GCC?] (Http://stackoverflow.com/questions/259248/how-do-i-test-the-current-version-of-gcc), beide generisch C/C++ –