最近寫一個項目用到一些自編框架,遇到函數輸入參數不確定的問題,然后就在想有什么辦法實現,下班后靈光閃現想到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語言
+關注
關注
180文章
7604瀏覽量
136698 -
回調函數
+關注
關注
0文章
87瀏覽量
11554
原文標題: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
?990次閱讀
評論