Advertencia del compilador: sugiere paréntesis alrededor de la asignación utilizada como valor de verdad
compiler-construction compiler-warnings (3)
Cuando intento compilar el fragmento de código a continuación, aparece esta advertencia:
warning: suggest parentheses around assignment used as truth value
¿Por qué pasó esto? Esta es una expresión bastante común, creo. Incluso uso algo así antes en mi código.
struct PIDList*
getRecordForPID(struct PIDList* list, pid_t pid) {
while(list = list->next)
if (list->pid == pid)
return list;
return NULL;
}
Es solo una advertencia de ''seguridad''. Es un modismo relativamente común, pero también un error relativamente común cuando quisiste tener ==
allí. Puede hacer que la advertencia desaparezca agregando otro conjunto de paréntesis:
while ((list = list->next))
Sea explícito, entonces el compilador no advertirá que tal vez haya cometido un error.
while ( (list = list->next) != NULL )
o
while ( (list = list->next) )
Algún día te alegrarás de que el compilador te haya dicho que la gente comete ese error;)
Si bien ese idioma en particular es común, aún más común es que las personas lo usen =
cuando significan ==
. La convención cuando realmente quieres decir =
es usar una capa extra de paréntesis:
while ((list = list->next)) { // yes, it''s an assignment