GCC不再执行<varargs.h>

我必须将这段代码片段从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> 。 区别:

  1. 该函数至少需要一个命名参数。
  2. 该功能必须是原型(使用省略号终结符)。
  3. va_start宏的工作方式不同:它有两个参数,第一个是要初始化的va_list ,第二个是最后一个命名参数的名称。

例:

 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忽略第二个参数,但是没有给出正确的一个是不可移植的。

你必须包括

 #include <stdarg.h> 

va_宏语法保持不变。