简单学习一下可变参数函数

描述

最近写一个项目用到一些自编框架,遇到函数输入参数不确定的问题,然后就在想有什么办法实现,下班后灵光闪现想到C语言的某个语法(本人时不时都会看一些博客文章,在需要的时候就会想在哪里见过某些东西),然后就凭记忆尝试输入搜索,最后找到了它--可变参数函数,参数数量可变的函数被称为可变参数函数(variable function)。

在框架的编写中,都会考虑很多东西,对于不确定的输入,使用可变参数函数也是个不错的解决方案,下面就来简单学习一下。

 

#include "stdio.h"
// 引入头文件
#include "stdarg.h"


// 可变参数函数, 第一个变量指定后边有多少个参数
void user_task_1(int NumofPara, ...)
{
  //用于for循环
  int i = 0;
  //用于打印变量
  int temp = 0;            


  //新建一个va_list类型的指针
  va_list pointer;


  //初始化指针,指针指向确定
  va_start(pointer, NumofPara);
  
  for( i = 0; i < NumofPara; i++ )
  {
    //用va_arg返回后续的可变参数, 类型是 int
    temp = va_arg(pointer, int);
    printf("item: %d
", temp);
    //同时,每次va_arg函数结束后,va_list指针指向下一位
  }
  //终结指针,释放内存
  va_end(pointer);
}


int main()
{
  user_task_1(3, 2, 3, 4);
}

 

更秀一点的操作可以配合回调函数使用,灵活调用需要触发的任务:

 

#include "stdio.h"
// 引入头文件
#include "stdarg.h"


void user_task(void (*task)(void), int NumofPara, ...)
{
  int i = 0;
  int temp = 0;            


  va_list pointer;


  va_start(pointer, NumofPara);
  
  for( i = 0; i < NumofPara; i++ )
  {
    temp = va_arg(pointer, int);
    printf("item: %d
", temp);
  }
  
  va_end(pointer);


  task();
}


void task(void)
{
  printf("this is my task
");
}


int main()
{
  user_task(task, 3, 2, 3, 4);
}

 

输出的结果如下图:

回调函数






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分