我必须将此代码片段从 varargs.h 更改为 stdarg.h,但我不知道具体如何:
#ifndef lint
int ll_log (va_alist)
va_dcl
{
int event, result;
LLog *lp;
va_list ap;
va_start (ap);
lp = va_arg (ap, LLog *);
event = va_arg (ap, int);
result = _ll_log (lp, event, ap);
va_end (ap);
return result;
}
当我尝试构建这个时,编译器说:
error "GCC no longer implements <varargs.h>."
error "Revise your code to use <stdarg.h>."
我需要编译和运行的程序有一些类似的片段,我需要知道如何更改它们。如果你能写一些例子,我就满足了。
<varargs.h>
是一个预标准的 C 头文件;使用<stdarg.h>
反而。差异:
- 该函数必须至少采用一个命名参数。
- 该函数必须原型化(使用省略号终止符)。
- The
va_start
宏的工作方式不同:它有两个参数,第一个是va_list
要初始化,第二个是最后一个命名参数的名称。
Example:
int ll_log (LLog *llog, ...) {
int event, result;
LLog *lp;
va_list ap;
va_start (ap, llog);
lp = llog;
event = va_arg (ap, int);
result = _ll_log (lp, event, ap);
va_end (ap);
return result;
}
关于va_start
:gcc 忽略第二个参数,但不给出正确的参数是不可移植的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)