函数‘va_start’的隐式声明

3
编辑:我现在有#include <stdarg.h>了,它可以编译-但是varargs没有被传递。有任何想法吗?
我有这段代码(摘录):

void msg(char* message, ...) {
    va_list args;
    va_start(args, message);
    char* m;
    if(asprintf(&m, message, args)==-1) m = message;
    va_end(args);

    print("<fg:green>INFO:</fg> ");
    println(m);
}

(printprintf是包装器,用于执行颜色标签)

这个想法是将可变参数传递给asprintf。

然而,它无法编译:

gcc -g -Wall -std=gnu99 -O2 -Wfatal-errors   -c -o src/ui.o src/ui.c
src/ui.c: In function ‘msg’:
src/ui.c:7:5: warning: implicit declaration of function ‘va_start’ [-Wimplicit-function-declaration]
src/ui.c:12:5: warning: implicit declaration of function ‘va_end’ [-Wimplicit-function-declaration]

我是否需要包含特定内容才能使用va_start()va_end()


GCC(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3 Xubuntu 12.04

(这是编译器的版本信息,适用于Xubuntu 12.04操作系统。)

2
#include <stdarg.h> ? - undefined
是的,我添加了它 - 现在可以编译了,但似乎不起作用。有什么想法吗?就好像可变参数消失了一样。 - undefined
1
如果你的雇主说:“它不工作,修好它,否则就被解雇”,并且不给你任何其他信息,你会有什么感觉? - undefined
@KerrekSB 你是什么意思?我说的是什么不起作用 - 可变参数没有传递。请撤销你的负评,这不公平。 - undefined
1
不。解释一下你的期望,实际发生了什么以及你产生了哪些诊断结果,然后我们再讨论。这个问题现在无法回答,更不用说对社区毫无帮助了。至少要展示一下asprintf是如何定义的。 - undefined
显示剩余2条评论
1个回答

16

您需要包含 #include <stdarg.h> 并使用 vasprintf 代替 asprintf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接