CUESTIÓN
¿Qué falla en el siguiente código?
[...]
if (chmod("pepe.txt",0666)==-1);
{perror("chmod");
return 1;}
[...]
Cuando lo ejecuto me aparece:
chmod: Error 0
He comprobado mil veces los permisos de
pepe.txt
y todo
parece en orden.
SOLUCIÓN
Fijaos que por la salida por pantalla parece deducirse que el flujo del
programa entra dentro del cuerpo del if
. Sin embargo, el
error que nos pone perror
es el error 0, o sea, la ausencia
de errores. Si no hay error, no debería entrar en el if
.
Sin embargo, entra. ¿Por qué?
Efectivamente NO hay error. Lo que ocurre es que se ha deslizado un
punto y coma (;
) al final de la línea del if
.
Esto trae como consecuencia dos cosas:
- Si se cumple la condición del
if
, se ejecuta la
sentencia vacía de C (es decir, nada).
- El bloque que viene a continuación se va a ejecutar siempre.
En C se puede abrir un bloque de código en cualquier lugar.
Es incluso posible definir variables locales dentro del bloque.
Cuidado con este error, pues es bastante fácil de cometer y muy difícil
de detectar.
© 2000 Guillermo González Talaván.