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,这是一个多阶段的操作: