stdarg.h
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:2k
源码类别:

DVD

开发平台:

C/C++

  1. /* $Id$ */
  2. /* stdarg.h: ANSI X3.159 1989  library header, section 4.8 */
  3. /* Copyright (C) Codemist Ltd. */
  4. /* Copyright (C) SGS-THOMSON Microelectronics Ltd. 1996 */
  5. #ifndef __stdarg_h
  6. #define __stdarg_h
  7. #include "stddef.h"
  8. #include "stdlib.h"
  9. #include "stdio.h"
  10. #ifdef __cplusplus
  11.   extern "C" {
  12. #endif
  13. /* N.B. <stdio.h> is required to declare vfprintf() without defining      */
  14. /* va_list.  Clearly the type __va_list there must keep in step.          */
  15. typedef char *va_list[1];       /* see <stdio.h> */
  16. /* Note that ___type is a syntactic item a bit like the type qualifiers   */
  17. /* 'static', 'register', 'const' etc except that it has no effect! Its    */
  18. /* purpose is to indicate when a type is being introduced and thus        */
  19. /* help (a bit) when the user gets the args to va_arg the wrong way round */
  20. #ifdef __cplusplus
  21. /*definitions  C++ compatible  */
  22. #define __alignof(type) 
  23.     (sizeof(type) < sizeof(int) ? sizeof(type)%sizeof(int):
  24.                                   sizeof(int) )
  25. #define __alignuptotype(ptr,type) 
  26.    ((char *)((int)(ptr) + (__alignof(type)-1) & ~(__alignof(type)-1)))
  27. #define va_start(ap,parmN) ((void)(*(ap) = (char *)&(parmN) + sizeof(parmN)))
  28. #define va_arg(ap,type) 
  29.    *( type *)( (*(ap)=__alignuptotype(*(ap),type) + sizeof(type)) -
  30.     sizeof( type) )
  31. #define va_end(ap) ((void)(*(ap) = (char *)-256))
  32. #else
  33. #define __alignof(type) 
  34.    ((char *)&(((struct{char __member1; 
  35.                        ___type type __member2;}*) 0)->__member2) - 
  36.     (char *)0)
  37. #define __alignuptotype(ptr,type) 
  38.    ((char *)((int)(ptr) + (__alignof(type)-1) & ~(__alignof(type)-1)))
  39. #define va_start(ap,parmN) ((void)(*(ap) = (char *)&(parmN) + sizeof(parmN)))
  40. #define va_arg(ap,type) 
  41.    (___assert((___typeof(___type type) & 0x28000481) == 0, 
  42.               "Illegal type used with va_arg"), 
  43.    *(___type type *)((*(ap)=__alignuptotype(*(ap),type)+sizeof(___type type))-
  44.                      sizeof(___type type)))
  45. #define va_end(ap) ((void)(*(ap) = (char *)-256))
  46. #endif
  47. #ifdef __cplusplus
  48.   }
  49. #endif
  50. #endif
  51. /* end of stdarg.h */