在C语言中,...(省略号)用于表示函数或宏可以接受可变数量的参数(Variable Arguments),也称为可变参数。这种机制允许函数/宏处理不同数量的输入参数。 C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:
int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
先看例子程序。该函数至少有一个整数参数,其后占位符…,表示后面参数的个数不定。在这个例子里,所有的输入参数必须都是整数,函数的功能只是打印所有参数的值。函数代码如下:
//示例代码1:可变参数函数的使用
#include "stdio.h"
#include "stdarg.h"
void simple_va_fun(int start, ...)
{
va_list arg_ptr;//函数里首先定义一个va_list型的变量,这里是arg_ptr,这个变量是存储参数地址的指针
int nArgValue =start;
int nArgCout="0"; //可变参数的数目
va_start(arg_ptr,start); //用va_start宏初始化arg_ptr,以固定参数的地址为起点,确定变参的 内存起始地址。
do
{
nArgCout;
printf("the %d th arg: %d",nArgCout,nArgValue); //输出各参数的值
nArgValue = va_arg(arg_ptr,int); //得到下一个可变参数的
} while(nArgValue != -1);
return;
}
int main(int argc, char* argv[])
{
simple_va_fun(100,-1);
simple_va_fun(100,200,-1);
return 0;
}
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va在这里是variable-argument(可变参数)的意思。
这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件。
C语言中有一种长度不确定的参数,形如:"…",它主要用在参数个数不确定的函数中,我们最容易想到的例子是printf函数。
宏定义中的可变参数(C99/C11)
在宏中,... 表示可变参数,用 __VA_ARGS__ 展开参数。
示例1:简单的日志宏
示例2:支持空参数的宏(C99的,##__VA_ARGS__扩展)

扫码关注








































