title: How to check if a void* pointer can be safely cast to something else?
body: <p>Let's say I have this function, which is part of some gui toolkit:</p>
  
  <pre><code>typedef struct _My_Struct My_Struct;
  /* struct ... */
  
  void paint_handler( void* data )
  {
     if ( IS_MY_STRUCT(data) ) /* &lt;-- can I do something like this? */
     {
        My_Struct* str = (My_Struct*) data;
     }
  }
  
  /* in main() */
  My_Struct s;
  signal_connect( SIGNAL_PAINT, &amp;paint_handler, (void*) &amp;s ); /* sent s as a void* */
  </code></pre>
  
  <p>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 <code>s</code>.</p>
  
  <p>Can I do something like <code>IS_MY_STRUCT</code> in the <code>paint_handler</code> function to check that the parameter I am receiving can be safely cast back to <code>My_Struct*</code> ?</p>