Je viens d'avoir un conflit de redéfinition dans le projet sur lequel je travaille et en cherchant pourquoi cela ne se produit pas sur toutes les plates-formes (il s'est avéré que c'était dans l'ordre des inclusions), je suis tombé sur le comportement suivant que je ne peux pas expliquer.
1. Compilation sans avertissement
#define LIST_HEAD(a) { int a = 0; }
#include <sys/queue.h>
int main() {
return 0;
}
2. Avertissement "macro redéfinie".
#include <sys/queue.h>
#define LIST_HEAD(a) { int a = 0; }
int main() {
return 0;
}
Je m'attendrais à ce que les deux cas produisent l'avertissement, étant donné qu'il n'y a pas de contrôles dans <sys/queue.h>
qui empêcherait une redéfinition.
Alors pourquoi le premier cas ne produit-il aucun avertissement, alors que le second en produit ? Qu'est-ce qui m'échappe ici ?
Btw : J'obtiens les mêmes résultats sur mon Mac avec clang et ma boîte Linux avec gcc.