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.