调用 printf() 的具有未定义参数编号的函数

A function with undefined argument numbers which call printf()

我正在尝试创建一个调用 printf 的函数(在我的例子中是 printw,我使用的是 curses),我之所以这样做是因为我想传递颜色并在同一个函数中进行刷新,而不是写 3每次我想展示一些东西我只需要用一个函数做一次所以我要创建的函数在 C 中看起来像这样:

void outputConsole(int color_id, const char* a, ...)
{
    attron(COLOR_PAIR(2));
    printw(a,...);
    refresh();
}

您可以使用 vw_printw 来做到这一点。解决方案是

void outputConsole(int color_id, const char* a, ...)
{
    attron(COLOR_PAIR(2));
    va_list args;
    va_start(args, a);
    vw_printw(stdscr, a, args);
    va_end(args);
    refresh();
}

同时声明确保编译器格式字符串检查你可以这样写

void outputConsole(int color_id, const char* a, ...)
#ifdef __GNUC__ 
       __attribute__(( format (printf, 2, 3)));
#else 
       ;
#endif