Como se ha ilustrado anteriormente, una de las trampas al usar operadores es tratar de trabajar sin paréntesis incluso cuando no se está seguro de la forma en la que se va a evaluar la expresión (consulte su propio manual de C para comprobar el orden de la evaluación de las expresiones).
Otro error extremadamente común se ve a continuación:
//: C03:Pitfall.cpp // Operator mistakes int main() { int a = 1, b = 1; while(a = b) { // .... } } ///:~
Listado 3.36. C03/Pitfall.cpp
La sentencia a = b
siempre se va a evaluar como
cierta cuando b
es distinta de cero. La
variable a
obtiene el valor de
b
, y el valor de b
también
es producido por el operador =
. En general, lo que
se pretende es utilizar el operador de equivalencia
(==
dentro de una sentencia condicional, no la
asignación. Esto le ocurre a muchos programadores (de todos
modos, algunos compiladores advierten del problema, lo cual es
una ayuda).
Un problema similar es usar los operadores
and y or de bits en
lugar de sus equivalentes lógicos. Los operadores
and y or de bits usan
uno de los caracteres (&
o |
),
mientras que los operadores lógicos utilizan dos
(&&
y ||
). Al igual que con
=
y ==
, es fácil escribir simplemente
un carácter en vez de dos. Una forma muy fácil de recordarlo es
que «los bits son mas pequeños, de modo que no necesitan
tantos caracteres en sus operadores».