Autre

Avertissement Mac : suggérer des parenthèses autour de l'affectation utilisée comme valeur de vérité

R

roublesaha

Affiche originale
22 déc. 2008
  • 8 janvier 2009
salut
J'utilise cet extrait de code

void * handle_;

if (handle_ =dlopen('/System/Library/Frameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('............');

}
else if (handle_ =dlopen('/System/Library/PrivateFrameworks/DiskArbitration.Framework/Versions/A/DiskArbitration',RTLD_NOW))
{
printf('...................');
}

Mais je reçois l'avertissement :
'suggérer des parenthèses autour de l'affectation utilisée comme valeur de vérité' pour la première ligne, c'est-à-dire la boucle 'for' .... quelqu'un peut-il m'aider à me débarrasser de cet avertissement .. À

kpua

25 juillet 2006


  • 8 janvier 2009
Tout d'abord, c'est généralement une mauvaise forme d'avoir des effets secondaires dans les instructions if().

Cependant, c'est parfois le moyen le plus simple de coder ce que vous voulez dire (bien que je ne pense pas que ce soit nécessairement dans votre exemple). Lorsque vous avez une affectation dans une instruction if, GCC attend généralement quelque chose comme ceci :

Code : |_+_|
Remarquez les parenthèses supplémentaires autour du devoir. GCC vous suggère d'utiliser les parenthèses pour éviter l'erreur suivante :

Code : |_+_|
qui ne vérifierait pas que la valeur attribuée à foo est égale à NULL, mais affecterait plutôt le booléen (bar() != NULL) à foo.

Il est également habituel et généralement plus clair d'avoir la vérification booléenne explicite, c'est pourquoi GCC s'attend à cela. S

Ponceuse

à
24 avril 2008
  • 9 janvier 2009
C'est aussi parce que la déclaration

Code : |_+_|
est correct C (attribuez b à a et vérifiez qu'il n'est pas nul), mais le plus souvent, les gens voulaient vraiment dire

Code : |_+_|
Étant donné que l'affectation à l'intérieur de if() est l'exception, GCC émet un avertissement à ce sujet. De plus, pour les futurs lecteurs de votre code, les parenthèses supplémentaires indiquent « oui, je parle vraiment d'affectation ici ».