c动态参数实现
c动态参数实现
标准库stdarg.h
下面出自 vadefs.h
typedef char* va_list;
#define _ADDRESSOF(v) (&(v))
#define _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1)) //剩余定理
#define __crt_va_start_a(ap, v) ((void)(ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v)))
#define __crt_va_arg(ap, t) (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
#define __crt_va_end(ap) ((void)(ap = (va_list)0))
#include <stdarg.h>
#include <stdio.h>
int Add(int n, ...)
{
va_list arg_ptr; // 参数指针
int add = 0, number = 0; // 初始化
va_start(arg_ptr,&n); //取固定末尾参数地址
for (size_t i = 1; i < n+1; i++)
{
/* code */
number = va_arg(arg_ptr,int); //移动参数指针,并返回数据
add += number;
}
va_end(arg_ptr); //清除参数指针
return add;
}
int main()
{
printf("%d\n",Add(2,1,3));
return 0;
}
动态参数实现过程:
- 通过固定参数获取被调函数栈中推入的非固定参数个数与类型
- 依照规则依次读取栈中非固定参数
- 基本运算
- 清除读取所用参数指针
- 返回结果
参考链接

浙公网安备 33010602011771号