Link (./8) :
Attention, de nos jours il faut caster en uintptr_t plutôt qu'en unsigned long.
Dans une ABI bien fichue (genre celles de tous les portages de GNU/Linux),
uintptr_t,
size_t et
unsigned long ont tous exactement la même taille, il n'y a que l'ABI W64 qui sux.

Cela dit,
uintptr_t existe depuis 1999, il serait effectivement temps de l'utiliser. (Mais la même plateforme pourrie qui a une ABI tordue est aussi celle qui n'implémente toujours pas complètement le C99 dans son compilateur officiel, 13 années après sa standardisation!

)