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.