最近寫一個(gè)項(xiàng)目用到一些自編框架,遇到函數(shù)輸入參數(shù)不確定的問題,然后就在想有什么辦法實(shí)現(xiàn),下班后靈光閃現(xiàn)想到C語言的某個(gè)語法(本人時(shí)不時(shí)都會(huì)看一些博客文章,在需要的時(shí)候就會(huì)想在哪里見過某些東西),然后就憑記憶嘗試輸入搜索,最后找到了它--可變參數(shù)函數(shù),參數(shù)數(shù)量可變的函數(shù)被稱為可變參數(shù)函數(shù)(variable function)。
在框架的編寫中,都會(huì)考慮很多東西,對于不確定的輸入,使用可變參數(shù)函數(shù)也是個(gè)不錯(cuò)的解決方案,下面就來簡單學(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)注
180文章
7605瀏覽量
136963 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11569
原文標(biāo)題:C語言|可變參數(shù)函數(shù)
文章出處:【微信號:玩轉(zhuǎn)單片機(jī),微信公眾號:玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論