|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
va_start(ap,v); 为什么第二个参数必须得是最后一个固定参数(...左边那个)
百度查的:
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
我的理解:
是不是将ap指向第一个可变参数(不算已经确认的形参)
那va_arg(ap,类型) 的工作原理是啥
这个类型是当前指针指向的类型还是 下一个形参的类型,看很多地方都说第二个参数是下一个形参的类型
如果是下一个参数的类型 那怎么知道第一个可变参数的类型呢
这是 stdarg.h 的源代码
- #ifndef _STDARG_H
- #define _STDARG_H
- typedef char *va_list;
- /* Amount of space required in an argument list for an arg of type TYPE.
- TYPE may alternatively be an expression whose type is used. */
- #define __va_rounded_size(TYPE) \
- (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
- #ifndef __sparc__
- #define va_start(AP, LASTARG) \
- (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
- #else
- #define va_start(AP, LASTARG) \
- (__builtin_saveregs (), \
- AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
- #endif
- void va_end (va_list); /* Defined in gnulib */
- #define va_end(AP)
- #define va_arg(AP, TYPE) \
- (AP += __va_rounded_size (TYPE), \
- *((TYPE *) (AP - __va_rounded_size (TYPE))))
- #endif /* _STDARG_H */
复制代码
|
|