⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdarg.h

📁 realview22.rar
💻 H
字号:
/* stdarg.h: ANSI 'C' (X3J11 Oct 88) library header, section 4.8 */
/* Copyright (C) Codemist Ltd., 1988                            */
/* Copyright (C) ARM Ltd., 1991-1999. All rights reserved */

/*
 * RCS $Revision: 1.15 $
 * Checkin $Date: 2004/06/01 15:51:43 $
 * Revising $Author: vkorstan $
 */

#ifndef __stdarg_h
#define __stdarg_h

  #ifndef __STDARG_DECLS
  #define __STDARG_DECLS

    #undef __CLIBNS

    #ifdef __cplusplus
      namespace std {
          #define __CLIBNS ::std::
          extern "C" {
    #else
      #define __CLIBNS
    #endif  /* __cplusplus */

/*
 * stdarg.h declares a type and defines macros for advancing through a
 * list of arguments whose number and types are not known to the called
 * function when it is translated. A function may be called with a variable
 * number of arguments of differing types. Its parameter list contains one or
 * more parameters. The rightmost parameter plays a special role in the access
 * mechanism, and will be called parmN in this description.
 */

/* N.B. <stdio.h> is required to declare vfprintf() without defining      */
/* va_list.  Clearly the type __va_list there must keep in step.          */
#ifdef __APCS_ADSABI
  typedef int *va_list[1];
#else
  typedef struct __va_list { void *__ap; } va_list;
#endif

   /*
    * an array type suitable for holding information needed by the macro va_arg
    * and the function va_end. The called function shall declare a variable
    * (referred to as ap) having type va_list. The variable ap may be passed as
    * an argument to another function.
    * Note: va_list is an array type so that when an object of that type
    * is passed as an argument it gets passed by reference.
    */
  #define va_start(ap, parmN) __va_start(ap, parmN)

   /*
    * The va_start macro shall be executed before any access to the unnamed
    * arguments. The parameter ap points to an object that has type va_list.
    * The va_start macro initialises ap for subsequent use by va_arg and
    * va_end. The parameter parmN is the identifier of the rightmost parameter
    * in the variable parameter list in the function definition (the one just
    * before the '...'). If the parameter parmN is declared with the register
    * storage class an error is given.
    * If parmN is a narrow type (char, short, float) an error is given in
    * strict ANSI mode, or a warning otherwise.
    * Returns: no value.
    */
  #define va_arg(ap, type) __va_arg(ap, type)

   /*
    * The va_arg macro expands to an expression that has the type and value of
    * the next argument in the call. The parameter ap shall be the same as the
    * va_list ap initialised by va_start. Each invocation of va_arg modifies
    * ap so that successive arguments are returned in turn. The parameter
    * 'type' is a type name such that the type of a pointer to an object that
    * has the specified type can be obtained simply by postfixing a * to
    * 'type'. If type is a narrow type, an error is given in strict ANSI
    * mode, or a warning otherwise. If the type is an array or function type,
    * an error is given.
    * In non-strict ANSI mode, 'type' is allowed to be any expression.
    * Returns: The first invocation of the va_arg macro after that of the
    *          va_start macro returns the value of the argument after that
    *          specified by parmN. Successive invocations return the values of
    *          the remaining arguments in succession.
    *          The result is cast to 'type', even if 'type' is narrow.
    */

#if !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__)
   /* va_copy is in C99 and non-strict C90 and non-strict C++ */
  #ifdef __APCS_ADSABI
    #define va_copy(dest, src) ((void)(*(dest) = *(src)))
  #else
    #define va_copy(dest, src) ((void)((dest) = (src)))
  #endif
   /* The va_copy macro makes the va_list dest be a copy of
    * the va_list src, as if the va_start macro had been applied
    * to it followed by the same sequence of uses of the va_arg
    * macro as had previously been used to reach the present state
    * of src.
    */
#endif

#define va_end(ap) ((void)0)
   /*
    * The va_end macro facilitates a normal return from the function whose
    * variable argument list was referenced by the expansion of va_start that
    * initialised the va_list ap. If the va_end macro is not invoked before
    * the return, the behaviour is undefined.
    * Returns: no value.
    */

    #ifdef __cplusplus
         }  /* extern "C" */
      }  /* namespace std */
    #endif /* __cplusplus */
  #endif /* __STDARG_DECLS */

  #ifdef __cplusplus
    #ifndef __STDARG_NO_EXPORTS
      using ::std::va_list;
    #endif
  #endif /* __cplusplus */

#endif

/* end of stdarg.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -