CUESTIÓN

  • Al compilar la práctica del getdirentries me da el siguiente error:
    /usuarios/gyermo/PRIVADO/SO/PRACTS/GETDIR$ c89 -D_HPUX_SOURCE getdir.c -o>
    cc: "getdir.c", line 15: warning 604: Pointers are not assignment-compatible.
    cc: "getdir.c", line 15: warning 563: Argument #2 is not the correct type.
    En la línea 15 tengo lo siguiente:
    getdirentries(fd,buffer,8192,&hola);
                        
    ¿Qué puedo hacer? Estoy desesperad@.


    SOLUCIÓN

    En primer lugar, lo que el compilador está dando no es un error, sino un aviso (warning). Quiere esto decir que el compilador continúa ejecutando su trabajo pero nos avisa de que puede que haya algo mal en nuestro código.

    El aviso viene porque hemos declarado en el prototipo de getdirentries que el segundo parámetro de la función es de tipo struct direct * y estamos pasando a la función una variable de tipo char *. Al ser los dos punteros (es decir, direcciones de memoria) no hay problema en continuar la compilación, pero es síntoma de que podemos habernos equivocado al pasar una variable puntero de otra familia.

    Para solucionarlo, y decirle al compilador que sí, que sabemos lo que estamos haciendo pues es así el caso, podemos hacer un casting. Consiste en anteponer un valor el tipo al que queremos que pertenezca entre paréntesis. ¡Ojo! El casting no cambia el tipo de la variable permanentemente, sino su valor. La línea quedaría así:
    getdirentries(fd,(struct direct *)buffer,8192,&hola);
                        
    Cuidado con los avisos del compilador. Hay que tratar de eliminarlos pero no hay que acallarlos sin más.
    © 2000 Guillermo González Talaván.