在定义一个函数的时候, 有些时候不能确定会有几个参数, 譬如printf这个函数, c语言中我们可以利用一系列宏来实现可变参数
原理
利用最后一个确定参数的位置找到下一个可变参数的位置, 这里涉及到内存对齐的问题. c中利用宏_INTSIZEOF完成内存对齐操作.
va_list, va_start, va_arg, va_end…
这里我给出一个例子
#include <stdio.h>
void test(int cnt, ...){
va_list ap;
va_start(ap, cnt);
for(int i = 0; i < cnt; i++){
value = va_arg(ap, int);
//do something
}
va_end(ap);
}- va_list: 不同平台实现不同
- va_arg(ap, arg_type): 迭代ap
- va_end(ap): 置零
相关应用可以查看asprintf的实现