Altres

Avís de Mac: suggereix parèntesis al voltant de l'assignació utilitzada com a valor de veritat

R

rublesaha

Cartell original
22 de desembre de 2008
  • 8 de gener de 2009
Hola
Estic utilitzant aquest fragment de codi

buit * manejar_;

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('.................');
}

Però rebo l'avís:
'suggereix parèntesis al voltant de l'assignació utilitzada com a valor de veritat' per a la primera línia, per exemple, per al bucle 'for'... algú em pot ajudar a desfer-me d'aquest avís? A

kpua

Jul 25, 2006


  • 8 de gener de 2009
En primer lloc, generalment és una mala forma tenir efectes secundaris en les declaracions if().

Tanmateix, de vegades és la manera més senzilla de codificar el que vols dir (tot i que no crec que sigui necessàriament al teu exemple). Quan teniu una tasca en una declaració if, el GCC generalment espera una cosa com això:

Codi: |_+_|
Observeu els parèntesis addicionals al voltant de la tasca. GCC suggereix que utilitzeu els parèntesis per evitar l'error següent:

Codi: |_+_|
que no comprovaria que el valor assignat a foo sigui igual a NULL, sinó que assignaria el booleà (bar() != NULL) a foo.

També és habitual i, en general, més clar tenir la comprovació booleana explícita, per això GCC ho espera. S

Sander

a
24 d'abril de 2008
  • 9 de gener de 2009
També ho és perquè la declaració

Codi: |_+_|
és correcta la C (assigna b a a i comprova si no és nul), però la majoria de vegades la gent realment volia dir

Codi: |_+_|
Com que l'assignació dins del if() és l'excepció, GCC emet un avís al respecte. També per als futurs lectors del vostre codi, els parèntesis addicionals indiquen 'sí, realment vull dir l'assignació aquí'.