C'est une opinion d'un développeur, d'autres développeurs ont dit à plusieurs reprises que c'est abusif. La seule chose sur laquelle ils sont d'accord est qu'il n'y a aucun moyen d'empêcher Intel de définir cette macro.
C'est un problème courant:
* Le logiciel X s'identifie avec CECI_EST_X.
* Le logiciel X implémente une extension utile à un langage et un protocole.
* De nombreux autres logiciels utilisent l'extension de X, avec "si CECI_EST_X, utiliser l'extension".
* Le logiciel Y implémente aussi l'extension de X.
Problème: tous les logiciels existants testent seulement X pour la fonctionnalité, pas Y. La solution propre serait de corriger tous les logiciels existants pour tester aussi pour Y. Mais l'éditeur de Y se dit: il y a plus simple, définissions CECI_EST_X et tous les logiciels fonctionneront sans modifications. Et c'est dommage, parce que ça dévalue la signification de CECI_EST_X et rend impossible de tester vraiment pour X si on en a besoin.
Ce n'est pas spécifique à __GNUC__, tout ça, ça se retrouve aussi avec les tables ACPI où le noyau Linux se fait passer pour un certain OS plus courant et à plein d'autres endroits.
À 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.
