在定义一个函数的时候, 有些时候不能确定会有几个参数, 譬如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的实现