C语言变长参数表
标签(空格分隔): ANSI C 变长参数 标准输出
声明格式,如printf函数:
int printf(char *fmt, ...)
其中,省略号表示参数表中的参数的数量和类型是可变的。**注意:省略号只能出现在参数表的尾部,即函数的声明中必须至少有一个显式声明的参数,如printf
中的char *fmt
参数。
变长参数表的使用(处理)
#include <stdarg.h>
va_list
类型,va_start
,va_arg
和va_end
宏
stdarg.h
头文件
标准头文件<stdarg.h>
中包含一组宏定义(即上述va_
宏),它们对如何遍历参数表进行了定义。虽然该头文件的实现在不同的机器上的实现不同,但提供的接口是一致的。
va_list
和va_start
va_list
是指针类型名,用于声明一个变量,该变量将依次引用各参数。由va_start
将该变量初始化为指向第一个无名参数的指针。**注意:在使用va_list
声明的变量之前,必须调用一次宏va_start
。如:
va_list ap;
va_start(ap, fmt); /* 将ap指向fmt后的第一个无名参数 */
va_arg
每次调用va_arg
,该宏都会返回一个参数,并将ap(va_list ap;
)指向下一个参数。va_arg
要求传入一个类型名来决定返回的对象类型、指针移动的步长。如:
int ival;
switch(*p++) {
case 'd':
ival = va_arg(ap, int);
break;
}
va_end
va_end
负责完成一些必要的清理工作,必须在函数返回前调用。如:
va_end(ap);
更多好玩的内容请关注我的公众号~会介绍一些 linux 上的效率工具,C 语言, linux 咨询以及 linux 内核源码学习。