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:
  1. Si se cumple la condición del if, se ejecuta la sentencia vacía de C (es decir, nada).
  2. 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.