我正在UNIX环境3版中进行高级编程,我找到了这段代码
err_msg(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(0, 0, fmt, ap);
va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)
并err_doit
是:
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
char buf[MAXLINE];
vsnprintf(buf, MAXLINE-1, fmt, ap);
if (errnoflag)
snprintf(buf+strlen(buf), MAXLINE-strlen(buf)-1, ": %s",
strerror(error));
strcat(buf, "\n");
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /* flushes all stdio output streams */
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是,为什么作者传递指针const char
作为参数va_start
.据我所知,你只允许传递省略号部分所代表的参数数量,如下所述:
void f1(int …
Run Code Online (Sandbox Code Playgroud)