最近寫一個(gè)項(xiàng)目用到一些自編框架,遇到函數(shù)輸入?yún)?shù)不確定的問題,然后就在想有什么辦法實(shí)現(xiàn),下班后靈光閃現(xiàn)想到C語言的某個(gè)語法(本人時(shí)不時(shí)都會(huì)看一些博客文章,在需要的時(shí)候就會(huì)想在哪里見過某些東西),然后就憑記憶嘗試輸入搜索,最后找到了它--可變參數(shù)函數(shù),參數(shù)數(shù)量可變的函數(shù)被稱為可變參數(shù)函數(shù)(variable function)。
在框架的編寫中,都會(huì)考慮很多東西,對(duì)于不確定的輸入,使用可變參數(shù)函數(shù)也是個(gè)不錯(cuò)的解決方案,下面就來簡(jiǎn)單學(xué)習(xí)一下。
#include "stdio.h"
// 引入頭文件
#include "stdarg.h"
// 可變參數(shù)函數(shù), 第一個(gè)變量指定后邊有多少個(gè)參數(shù)
void user_task_1(int NumofPara, ...)
{
//用于for循環(huán)
int i = 0;
//用于打印變量
int temp = 0;
//新建一個(gè)va_list類型的指針
va_list pointer;
//初始化指針,指針指向確定
va_start(pointer, NumofPara);
for( i = 0; i < NumofPara; i++ )
{
//用va_arg返回后續(xù)的可變參數(shù), 類型是 int
temp = va_arg(pointer, int);
printf("item: %d
", temp);
//同時(shí),每次va_arg函數(shù)結(jié)束后,va_list指針指向下一位
}
//終結(jié)指針,釋放內(nèi)存
va_end(pointer);
}
int main()
{
user_task_1(3, 2, 3, 4);
}
更秀一點(diǎn)的操作可以配合回調(diào)函數(shù)使用,靈活調(diào)用需要觸發(fā)的任務(wù):
#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);
}
輸出的結(jié)果如下圖:

審核編輯:劉清
-
C語言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145647 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
95瀏覽量
12203
原文標(biāo)題:C語言|可變參數(shù)函數(shù)
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
可變參數(shù)函數(shù)的實(shí)現(xiàn)原理
C語言——可變參數(shù)問題.
C語言中可變參數(shù)的定義
簡(jiǎn)單概述一下窗口之間傳遞參數(shù)的機(jī)制
怎么設(shè)計(jì)c語言的可變長(zhǎng)參數(shù)函數(shù)?
如何才能在51系統(tǒng)下使用類似printf這樣的可變參數(shù)的子函數(shù)呢?
指針作為函數(shù)參數(shù)
分享一下嵌入式 HarmonyOS 的學(xué)習(xí)思路
C語言-函數(shù)的可變形參(不定形參)
簡(jiǎn)單聊一下多點(diǎn)觸控協(xié)議
學(xué)習(xí)一下ARM的智能功率分配技術(shù)
如何實(shí)現(xiàn)一個(gè)自己的printf函數(shù)代碼?
簡(jiǎn)單學(xué)習(xí)一下可變參數(shù)函數(shù)
評(píng)論