一.可变参数的处理
当我们在写程序的时候,如果传入的参数是确定的,那么依次处理就行;如果参数的长度不确定,该怎么处理呢?
在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表。如 void func (...)
另外C语言提供了一套标准的处理方法。
先来看看下面的例子。(该函数实现的是:将不定长度的字符输出)
#include "stdarg.h"
void Dug_Printf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
fflush(stdout);
}
来一步步分析下每段代码的含义:
(1)首先定义一个va_list型的变量,这个变量是指向参数的指针,也就是指向参数列表里的"...";VA_LIST 是在C语言中解决变参问题的一组宏。
(2)va_start(args, fmt); 和va_end(args); 是一组;前者对定义的参数 进行初始化,让它指向可变参数表里面的第一个参数;后者在获取所有的参数之后,将定义的参数指针关掉,以免发生危险。
(3)vprintf 的作用是将可变参数列表的格式化数据打印到stdout。
(4)fflush(stdout):清空输出缓冲区,并把缓冲区内容输出。