C 传递varargs函数的参数

C 传递varargs函数的参数,c,C,假设我想要实现一个函数 void myprintf(const char* format, ...){ printf("Hello world!\n"), printf(format, ...); } 也就是说,我想把varargs列表传递给printf。有什么方便的方法可以做到这一点吗?没有。但是printf系列中的库函数提供了一个接受va_列表作为参数而不是省略号的函数。事实上,如果您正在编写自己的变量参数函数,那么提供这样一个变量是一个很好的实践 然后,您的包装器将如下所示:

假设我想要实现一个函数

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   printf(format, ...);
}

也就是说,我想把varargs列表传递给printf。有什么方便的方法可以做到这一点吗?

没有。但是
printf
系列中的库函数提供了一个接受
va_列表作为参数而不是省略号的函数。事实上,如果您正在编写自己的变量参数函数,那么提供这样一个变量是一个很好的实践

然后,您的包装器将如下所示:

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   va_list args;
   va_start(args, format);
   vprintf(format, args);
   va_end(args);
}

在预处理器的帮助下:

#include <stdio.h>

#define myprintf(...) \
do { \
   printf("Hello world!\n"), \
   printf(__VA_ARGS__); \
} while (0)

int main(void)
{    
    myprintf("%s %d\n", "Hello", 1);
    return 0;
}
#包括
#定义myprintf(…)\
做{\
printf(“你好,世界!\n”)\
printf(_VA_ARGS__;)\
}而(0)
内部主(空)
{    
myprintf(“%s%d\n”、“您好”,1);
返回0;
}

@embedded\u crysis,请用谷歌“c varargs”。这些答案我已经找到了(在其他众多答案中):,。你得到了我的投票,但我仍然真的不喜欢这种思路会导致什么…谢谢@StoryTeller,我同意,也更喜欢va_List这很酷,但我真的不明白:)而(0)?@embedded_crysis,这是一个多阶段的操作: