Jepp, ein void* bleibt ein void* und da weiß der Compiler halt nicht, wieviele Bytes er beim Dereferenzieren nun lesen darf / muß. Der obige Cast wird implizit hierzu:
C++:
args = (void*)(struct thread_args*)args;
Der zweite Weg ist bis auf den Typo schon korrekt.
...sieht aber widerlich aus. Ich würds in ne eigene Variable packen und das Optimieren dem Compiler überlassen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra