Estoy transfiriendo algunos códigos C a un entorno de chip DSP de TI. Estoy lidiando con el compilador de CAdvertencia cuando se realiza el cambio entre el puntero y el puntero a la función
Tengo una estructura de datos que incluye un puntero a una función. Tengo una función que inicializa la estructura de datos. Algo como esto:
typedef void (*PFN_FOO)(int x, int y);
struct my_struct
{
PFN_FOO pfn;
};
init_struct(struct my_struct *p, void *pfn)
{
p->pfn = (PFN_FOO)pfn;
}
En Visual Studio y GCC este tipo de código se compila sin quejarse. De hecho, debido a que el argumento pfn
es tipo void *
, realmente no necesito ni siquiera poner un molde allí; simplemente lanzaría implícitamente sin queja.
En Code Composer Studio para los chips DSP TI, me sale "aviso: conversión de tipo no válido"
Mi política es hacer que el código compile sin advertencias, por lo que quiero arreglar esto. He intentado todo tipo de casting. Descubrí que el compilador está muy contento si lanzo mi puntero void *
primero a int
y luego lo echo al tipo correcto. Ew, ¡puaj!
¿Cómo puedo hacer este cast sin que el compilador se queje? ¿Realmente tengo que enviar a int
para cerrar el compilador?
Nota: Estoy específicamente no en busca de una solución al efecto de "cambiar init_struct()
a aceptar un PFN_FOO
en lugar de un void *
". Eso funcionaría para este fragmento de código simplificado, pero no funcionaría para el código real, que crea una lista de cosas posiblemente heterogéneas.
¿No sería más simple tener el acuerdo de tipo correcto y hacer pfn tipo PFN_FOO? Otro punto: deberías darle a init_struct() un tipo explícito; eso no se compila sin advertencias en VC++ 2008 incluso utilizando la compilación C. – Clifford
@Clifford, mi código real siempre tiene tipos explícitos en las funciones; Escribo mi código para compilar sin advertencias y soy cuidadoso con los tipos. El problema que estoy resolviendo es crear una función que inicialice una estructura de datos que pueda contener elementos heterogéneos, y quiero una única función de inicio, no una función de inicio por tipo de datos posible almacenados en ella. – steveha