c 变参原理

作者: eesly_yuan | 来源:发表于2017-04-06 21:19 被阅读32次

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

    return_type func(fixarg, ...)
    

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

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

    #include <stdarg.h>
    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 变参原理

        本文链接:https://www.haomeiwen.com/subject/ugzqattx.html