#ifndef __STDARG_H #define __STDARG_H #ifdef __cplusplus extern "C" { #endif /*! * \ingroup libc * \defgroup stdarg Variable argument list handling * @{ */ /* width of stack == width of int */ #define STACKITEM int typedef char *va_list; /* round up width of objects pushed on stack. The expression before the & ensures that we get 0 for objects of size 0. */ #define VA_SIZE(TYPE) \ ((sizeof(TYPE) + sizeof(STACKITEM) - 1) \ & ~(sizeof(STACKITEM) - 1)) /* &(LASTARG) points to the LEFTMOST argument of the function call (before the ...) */ #define va_start(AP, LASTARG) \ (AP=((va_list)&(LASTARG) + VA_SIZE(LASTARG))) #define va_end(AP) /* nothing */ #define va_arg(AP, TYPE) \ (AP += VA_SIZE(TYPE), *((TYPE *)(AP - VA_SIZE(TYPE)))) //@} #ifdef __cplusplus } #endif #endif