Otro

Advertencia de Mac: sugiera que se utilicen paréntesis alrededor de la asignación como valor de verdad

R

rublesaha

Poster original
22 de diciembre de 2008
  • 8 de enero de 2009
Hola
Estoy usando este fragmento de código

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

Pero recibo la advertencia:
'Sugerir paréntesis alrededor de la asignación utilizada como valor de verdad' para la primera línea i, e para el bucle 'for' ... ¿alguien puede ayudarme a deshacerme de esta advertencia ... PARA

kpua

Jul 25, 2006


  • 8 de enero de 2009
En primer lugar, generalmente es una mala forma tener efectos secundarios en las declaraciones if ().

Sin embargo, a veces es la forma más sencilla de codificar lo que quieres decir (aunque no creo que esté necesariamente en tu ejemplo). Cuando tiene una asignación en una declaración if, GCC generalmente espera algo como esto:

Código: if ( (foo = bar()) != NULL )
Observe los paréntesis adicionales alrededor de la tarea. GCC sugiere que use los paréntesis para evitar el siguiente error:

Código: if ( foo = bar() != NULL )
que no verificaría que el valor asignado a foo sea igual a NULL, sino que asignará el booleano (bar ()! = NULL) a foo.

También es habitual y, en general, más claro tener la verificación booleana explícita allí, por eso GCC espera esto. S

Lijadora

a
24 de abril de 2008
  • 9 de enero de 2009
También es porque la declaración

Código: if (a = b) {...}
es correcta C (asigne b a ay verifique que no sea cero), pero la mayoría de las veces la gente realmente quiso decir

Código: if (a == b) {...}
Dado que la asignación dentro de if () es la excepción, GCC emite una advertencia al respecto. También para los futuros lectores de su código, los paréntesis adicionales indican 'sí, realmente me refiero a la asignación aquí'.