Cela permet de vérifier le type, l'égalité entre les pointeurs doit être entre des types compatibles et gcc
fournira un avertissement pour les cas où ce n'est pas le cas.
Nous pouvons voir que l'égalité entre les pointeurs exige que les pointeurs soient de type types compatibles de la projet de norme C99 section 6.5.9
Opérateurs d'égalité qui dit :
L'une des situations suivantes s'applique :
et comprend :
les deux opérandes sont des pointeurs vers des versions qualifiées ou non qualifiées de types compatibles ;
et nous pouvons trouver ce qu'un type compatible est de la section 6.2.7
Type compatible et type composite qui dit :
Deux types ont un type compatible si leurs types sont les mêmes.
Cette discussion sur osnews couvre également ce sujet et a été inspiré par le Hacks GCC dans le noyau Linux qui contient le même exemple de code. La réponse dit :
a à voir avec la vérification du type.
Réaliser un programme simple :
int x = 10;
long y = 20;
long r = min(x, y);
Donne l'avertissement suivant : avertissement : la comparaison de types de pointeurs distincts distincts n'est pas accompagnée d'un cast
0 votes
Curieux. Il me semble que la comparaison des adresses forcerait _min1 et _min2, et donc x et y, à être effectivement calculés et stockés, mais cela ne devrait-il pas se produire de toute façon lorsque _min1 est comparé à _min2 à la ligne suivante ?
0 votes
Pour info, la question Macro avec une ligne inhabituelle dans le noyau linux ? a été fusionné avec celui-ci, donc vous avez quelques nouvelles réponses maintenant.