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

审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !