c compiler-construction compiler-warnings

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