📄 stdarg.h
字号:
/****************************************************************************/
/* stdarg.h v4.00 */
/* Copyright (c) 1996-2004 Texas Instruments Incorporated */
/****************************************************************************/
#ifndef _STDARG
#define _STDARG
#ifdef __cplusplus
#define _NS_PREFIX std::
namespace std {
#else
#define _NS_PREFIX
#endif /* __cplusplus */
typedef int *va_list;
#ifdef __cplusplus
} /* namespace std */
#endif
#define va_start(ap, parmN) ((ap)=((_NS_PREFIX va_list)__va_parmadr(parmN))+ \
((__va_argref(parmN) ? sizeof(&parmN) : sizeof(parmN))-sizeof(int)))
#define va_end(ap)
/****************************************************************************/
/* RETURN THE NEXT VALUE ON THE STACK ... */
/* */
/* (<advance ap>, <access the value>) BECOMES ... */
/* */
/* ap += 1 + <1 if type is long or float and current address is even>; */
/* if (<type is passed by address [struct or union]>) return **ap; */
/* else if (<type is integer size>) return *ap; */
/* else (<type must be long or float>) return *ap++; */
/* */
/* LONG/FLOATS ARE ALWAYS ALIGNED ON AN EVEN WORD BOUNDARY, EVEN WHEN */
/* PASSED AS PARAMETERS, THUS ap MUST BE ALIGNED FOR THOSE ACCESSES. */
/* ap MUST ALWAYS BE POINTING 1 AWAY FROM THE NEXT OBJECT, THUS THE POST */
/* INCREMENT ON A LONG/FLOAT ACCESS. */
/****************************************************************************/
#define va_arg(ap, type) \
( ((ap) += 1 + ( !__va_argref(type) \
&& sizeof(type) != sizeof(int) \
&& !((int) (ap) & 1) ) ), \
(__va_argref(type) ? (** (type **) (ap)) : \
(sizeof(type) == sizeof(int) ? (* (type *) (ap)) : \
(* (type *) ((ap)++)) ) ) )
#ifdef __cplusplus
#ifndef _CPP_STYLE_HEADER
using std::va_list;
#endif /* _CPP_STYLE_HEADER */
#endif /* __cplusplus */
#else
#ifdef __cplusplus
#ifndef _CPP_STYLE_HEADER
using std::va_list;
#endif /* _CPP_STYLE_HEADER */
#endif /* __cplusplus */
#endif /* _STDARG */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -