c 变参原理

简介
采用变参的最典型函数就是printf,其参数个数可变,类型也可变,基本原型如下

return_type func(fixarg, ...)

包含一个或者以上的固定参数,...表示后续参数个数和类型不定

实现原理与使用
c中提供了如下的类型和函数(宏),使我们能够自定义自己的变参函数并使用
va_list、va_start、va_arg、va_end
一个典型的demo如下

#include 
int func(int fixarg, ...){ 
    va_list pargs = NULL; 
    va_start(pargs, fixarg); 
    int narg = va_arg(pargs, int);
    ...
    va_end(pargs); 
}

va_list定义了一个指针,va_start作用是让pargs指向固定参数后面的第一个变参的地址,va_arg是从parg指针位置开始获取参数,对于默认cdec调用管理下,传进来的参数在栈中的结构如下


获取变参原理

这里只是简单介绍了一下变参的基本实现方式,实际还和栈中参数对齐,调用管理等相关,同时变参的使用还有许多需要注意的地方,这里不在一一列举,如非必要尽量不要用变参。具体一些其他介绍可参考这篇文章可变参数函数详解

你可能感兴趣的:(c 变参原理)