### 省略号参数

在使用 printf 函数输出信息时，当在程序中调用该函数时。其参数列表会显示省略号，如图 1 所示。

图 1 省略号参数

省略号参数代表的含义是函数的参数是不固定的，可以传递一个或多个参数。对于 printf 函数来说，可以输出一项信息，也可以同时输出多项信息。例如：

printf("%d\n",2008); //输出一项信息

printf("%s-%s-%s\n","Beijing","2008","Olympic Games"); //输出多项信息

那么如何在程序中定义省略号参数的函数呢？可以按如下的方式定义。

void OutputInfo(int num,...) //定义省略号参数函数

对于上述方式的函数，在编写函数体时需要一一读取用户传递的实际参数。可以使用 va_list 类型和 va_start、va_arg、va_end 3 个宏读取传递到函数中的参数值。下面以一个具体的示例介绍省略号函数的定义及使用。

例如，定义省略号形式的函数参数

void OutputInfo(int num,...) //定义一个省略号参数的函数

{

va_list arguments; //定义 va_list 类型变量

va_start(arguments,num);

while(num--) //读取所有参数的数据

{

char* pchData = va_arg(arguments,char*); //获取字符串数据

int iData = va_arg(arguments,int); //获取整型数据

printf("%s\n",pchData); //输出字符串

printf("%d\n",iData); //输出整数

}

va_end(arguments);

}

int main(int argc, char* argv[])

{

OutputInfo(2,"Beijing",2008,"Olympic Games",2008); //调用 OutputInfo 函数

return 0;

}

注意：va_list类型并不是常用类型，用户如果想要了解更多信息，请参阅其他资料。

执行上述代码，效果如图 2 所示。

图 2 省略号参数