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 变参原理

    简介采用变参的最典型函数就是printf,其参数个数可变,类型也可变,基本原型如下 包含一个或者以上的固定参数,....

  • 函数变参的使用

    介绍C/C++,java,和go语言对函数变参的使用。 1. C/C++语言的变参 1.1 变参函数声明 变参函数...

  • 变参(C语言)

    这是一个变参函数声明。加三个点就是了。取得参数的套路是 这样三步,就将 各个参数,放在了 buf 中。完整函数如下...

  • C++变参模板

    一、变参模板的定义 变参模板的意思说的是从 C++ 11 开始,模板参数接受不变的个数。类似于 C 语言中的 pr...

  • 【C编程】变参函数学习!

    程序运行结果:

  • XGboost 基线模型及部分参数优化

    1 模型原理及调参参考 调参:XGBoost参数调优完全指南原理:xgboost入门与实战(原理篇) 2 输出基线...

  • 变叶树参

    变叶树参,五加科树参属,直立灌木,果期9-10月。

  • 十五、变参

    变参方法 是JDK1.5出现的新特性 语法 参数列表 :(int ... ints) 特点 1:变参可以接收任意个...

  • iOS开发中va_list的应用

    va_list的定义: VA_LIST 是在C语言中解决变参问题的一组宏,所在头文件:#include ,用于获...

  • iOS多线程之pthread的简单使用

    前言 pthread是c语言编写的,基本用不到,了解一下就好. 线程创建代码 传参:C语言传参 oc传参

网友评论

    本文标题:c 变参原理

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