Confirm: safe and portable?
Code:
int main( void ) {
 struct {
  int magic;
  void *data1;
  void *data2;
  ...
  void *datan;
 } args = { 0xdeadbeef };

 myfunc( &args );
}

myfunc( void *arg ) {
int magic = ((struct { int magic; } *)arg)->magic;
...
}
My guess is C struct elements are stored linearly, so this will be safe... but I'm not 100% certain.