gpt4 book ai didi

c - GCC 不再实现

转载 作者:IT王子 更新时间:2023-10-29 00:41:20 26 4
gpt4 key购买 nike

我必须将此代码片段从 varargs.h 更改为 stdarg.h,但我不知 Prop 体如何:

#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. 函数必须是原型(prototype)(使用省略号终止符)。
  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 忽略第二个参数,但不给出正确的参数是不可移植的。

关于c - GCC 不再实现 <varargs.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com