void warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); #ifdef __minix _vwarnx(fmt, ap); #else _vwarnx(eval, fmt, ap); #endif va_end(ap); }
static void warnx(const char *fmt, ...) { va_list ap; /* typedef char * va_list; 也可能是一个struct (typedef struct {char *a0; int offset; } va_list;) 在STDIO.H中 */ va_start(ap, fmt); /* start:必须以va_start开始,并以va_end结尾 */ _vwarnx(fmt, ap); /* ap是当前参数的指针 */ va_end(ap); /* end :必须以va_end结尾,把ap指针清为NULL */ } //在函数体中声明一个va_list,然后用va_start函数来获取参数列表中的参数,使用完毕后调用va_end()结束。
static void warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); _vwarnx(fmt, ap); va_end(ap); }