A partir du manuel gnu cpp ...
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
Ces macros sont définies par tous les compilateurs GNU qui utilisent le préprocesseur C: C, C++, Objective-C et Fortran. Leurs valeurs sont la version principale, la version mineure et le niveau de correctif du compilateur, en tant que constantes entières. Par exemple, GCC 3.2.1 définira __GNUC__
-3, __GNUC_MINOR__
-2 et __GNUC_PATCHLEVEL__
à 1. Ces macros sont également définies si vous invoquez le préprocesseur directement.
__GNUC_PATCHLEVEL__
est nouvelle à GCC 3.0; il est également présent dans les instantanés de développement largement utilisés menant à 3.0 (qui s'identifient comme GCC 2.96 ou 2.97, selon le cliché que vous avez). Si tout ce que vous devez savoir est de savoir si votre programme est compilé par GCC ou un compilateur non-GCC qui prétend accepter les dialectes GNU C, vous pouvez simplement tester __GNUC__
. Si vous avez besoin d'écrire du code qui dépend d'une version spécifique, vous devez être plus prudent.Chaque fois que la version mineure est augmentée, le niveau de patch est remis à zéro; chaque fois que la version majeure est augmentée (ce qui arrive rarement), la version mineure et le niveau de correctif sont réinitialisés. Si vous souhaitez utiliser les macros prédéfinies directement dans le conditionnel, vous devrez l'écrire comme ceci:
/* Test for GCC > 3.2.0 */
#if __GNUC__ > 3 || \
(__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
(__GNUC_MINOR__ == 2 && \
__GNUC_PATCHLEVEL__ > 0))
duplicata possible de [Comment tester la version actuelle de GCC?] (Http://stackoverflow.com/questions/259248/how-do-i-test-the-current-version-of-gcc), tous deux génériques C/C++ –