最近写一个项目用到一些自编框架,遇到函数输入参数不确定的问题,然后就在想有什么办法实现,下班后灵光闪现想到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);
}
输出的结果如下图:

审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7642浏览量
144553 -
回调函数
+关注
关注
0文章
93浏览量
12111
原文标题:C语言|可变参数函数
文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
C语言中可变参数的定义
文章目录文章目的写代码的时候经常需要通过打印trace来debug代码,于是就有了自己封装一个TRACE函数的想法。知识点(1)打印trace的时候每一次需要打印的参数个数不是
发表于 07-14 07:43
简单概述一下窗口之间传递参数的机制
先简单概述一下窗口之间传递参数的机制–“张三去商店买烟”分解动作:谁?–张三去哪?–商店要干嘛?–买烟怎么去?–走路去结果?–张三得到烟窗口(A):张三信号(signal):想要买烟连接方式
发表于 01-18 09:01
分享一下嵌入式 HarmonyOS 的学习思路
在我拿到小熊派鸿蒙开发板后,首先按照教程,搭建了开发环境,体验了一下程序是如何进行编译和下载,以及初步了解了一下资料的架构。关于小熊派鸿蒙开发板的信息,可以戳这里开始学习 Harmony...
发表于 12-22 19:02
•9次下载
学习一下ARM的智能功率分配技术
今天来学习一下ARM的“智能功率分配”(Intelligent Power Allocation)技术,下文中简称IPA。
发表于 07-14 14:18
•1732次阅读

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