typedef __builtin_va_list VA_LIST; #define VA_START(Marker, Parameter) __builtin_va_start (Marker, Parameter) #define VA_ARG(Marker, TYPE) ((sizeof (TYPE) < sizeof (long long)) ? (TYPE)(__builtin_va_arg (Marker, long long)) : (TYPE)(__builtin_va_arg (Marker, TYPE))) #define VA_END(Marker) __builtin_va_end (Marker) #define NULL ((void *)0) int ReturnMarker ( VA_LIST Marker ) { return VA_ARG (Marker, int); } int Test ( void *Handle, ... ) { VA_LIST Marker; int ret; VA_START (Marker, Handle); ret = ReturnMarker (Marker); VA_END (Marker); return ret; } int Test2 () { return sizeof (VA_LIST); } int main () { return Test (NULL, 123); }