j'ai une compil conditionnelle qui dépend du compilateur (bah ué y'a des boulets de clients qui préfèrent le compilo arm officiel ici)
pour vérifier que j'utilise bien gcc, c'est quelle macro? la macro __GNUC__ est-elle ok pour ça?
PpHd (./4) :
__GNUC__ est définit pour dire que le compilateur supporte le GNU LANGUAGE C (ou C++) et non pas que c'est le compilateur GNU C.
Kevin Kofler (./6) :
__GNUC__ est défini pour dire que c'est GCC, après il y a des compilateurs concurrents (en général propriétaires, genre ICC d'Intel) qui abusent et définissent le même symbole pour faire compiler les sources écrites pour GCC sans modifications, mais cette pratique est très mal vue. Le problème est que le projet GCC ne peut pas empêcher cette pratique (pour les mêmes raisons pour lesquelles on ne peut pas empêcher MinGW de définir _WIN32, donc ce n'est pas forcément une mauvaise chose).
This is our mistake. Originally __GNUC__ meant that this was the GNU C
compiler (aka GNU Compiler Collection). However, we have added so many
extensions to the compiler that it later came to mean that this is the GNU
C language. There is unfortunately no way to distinguish between a
program written in GNU C, and a program intended to be compiled by the GNU
C compiler. All compilers that implement the GNU C language must define
__GNUC__. There is no way around this. The use of __GNUC__ is so
pervasive in GNU/Linux that a compiler has to define it or else it simply
won't work. This is why the Intel compilers and other compilers define it.
They have no choice.
squalyl (./5) :
(l'autre compilo c'est ADS je sais pas si c'est connu.)
Kevin Kofler (./8) :
À mon avis, redéfinir __GNUC__ en "ceci est le langage GNU C" et introduire une autre macro disant "ceci est GCC" ne servira à rien, les mêmes autres compilateurs qui définissent actuellement __GNUC__ vont se mettre à définir aussi cette autre macro.![]()