隐式声明函数'va_start'

Mig*_*ork 1 c linux gcc variadic-functions

编辑:我现在已经#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);
}
Run Code Online (Sandbox Code Playgroud)

(print并且printf是执行颜色标记的包装器)

我的想法是将varargs传递给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]
Run Code Online (Sandbox Code Playgroud)

我必须包括一些特别的东西来获得va_start()和va_end()?


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

frm*_*ryr 8

你必须包括#include <stdarg.h>和使用vasprintf而不是asprintf.