添加当前模块大概功能的描述,希望不要把所有接口文档写在一个文件中,至少按模块分类。
变参函数的最直观的例子就是 printf 和 scanf 两个函数,因为这两个
函数除了第一个参数是固定的以外,其它的参数都可以动态的传入
一个支持变参的函数,使用 … 表示不定个数的参数,在函数的内部很难
知道参数的个数,所以我们应该做到能从第一个参数获取到后面的参数个数
关于变参函数的指令,详解C语言函数之可变参数原理:va_start、va_arg及va_end
void print(const char* fmt, ...)
{
// 定义并初始化变参对象
va_list VaList = nullptr;
va_start(VaList, fmt);
// 遍历了整个 fmt 字符串的每一个元素
for (int i = 0; i < strlen(fmt); ++i)
{
// 表示后续是一个字符,以字符方式输出
if (fmt[i] == '0')
{
char chr = va_arg(VaList, char);
putchar(chr);
putchar('\n');
}
// 如果要输出的是一个字符串
else if (fmt[i] == '1')
{
char* str = va_arg(VaList, char*);
puts(str);
}
// 如果输出的是一个布尔值
else if (fmt[i] == '2')
{
bool b = va_arg(VaList, bool);
puts(b ? "true\n" : "false\n");
}
}
va_end(VaList);
}
int main()
{
print("210", true, "string", 'a');
return 0;
}