ApprenticeHacker ApprenticeHacker - 7 months ago 34
C Question

How to check if a void* pointer can be safely cast to something else?

Let's say I have this function, which is part of some gui toolkit:

typedef struct _My_Struct My_Struct;
/* struct ... */

void paint_handler( void* data )
if ( IS_MY_STRUCT(data) ) /* <-- can I do something like this? */
My_Struct* str = (My_Struct*) data;

/* in main() */
My_Struct s;
signal_connect( SIGNAL_PAINT, &paint_handler, (void*) &s ); /* sent s as a void* */

Since the paint_handler will also be called by the GUI toolkit's main loop with other arguments, I cannot always be sure that the parameter I am receiving will always be a pointer to

Can I do something like
in the
function to check that the parameter I am receiving can be safely cast back to


Your void pointer looses all its type information, so by that alone, you cannot check if it can be cast safely. It's up to the programmer to know if a void* can be cast safely to a type.