La única forma que se me ocurre es que mientras desconozcas el sistema operativo del cual se trata sean punteros a void. Ya que los punteros siempre tienen el mismo tamaño no habrá quejas por parte del compilador en ningún caso. Una vez conozca el tipo de sistema operativo que se trata puedes generar de forma dinámica el tipo de estructura que requieras mediante malloc. Lo único que tendrás que tener en cuenta es que debes liberarlo cuando cierres el programa en la función de limpiar recursos, en el main o con atexit, según hagas la limpieza.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
void* pointer;
pointer
= malloc(sizeof(int)); *(int*)pointer = 3;
printf("%d\n", *(int*)pointer
);
strcpy((char*)pointer
, "Una cadena"); printf("%s\n", (char*)pointer
); }
Sí, el código es un poco feo, pero en C es la forma de tener un tipo de objeto genérico.