最近写一个项目用到一些自编框架,遇到函数输入参数不确定的问题,然后就在想有什么办法实现,下班后灵光闪现想到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条评论
快来发表一下你的评论吧 !