當前位置:學者齋 >

計算機 >C語言 >

C語言中實現參數個數可變函數

C語言中實現參數個數可變函數

導語:C語言中實現參數個數可變函數:其實,我總覺得有個結論應該是必然的。既然很多語言最初都是由C語言發展來的,還有很多語言的基礎是用C語言實現的。

C語言中實現參數個數可變函數

那麼,這些用C語言實現的高級語言的很多特性或者是功能在一定程度上應該是在C語言的開發中可以模擬的。正是如此,很多時候考慮諸如XXX是否可以用C語言實現的時候,應該無需考慮就能夠給出一個肯定的答覆。

關於參數可變的函數的實現其實還不是這種情況,但是讓我想到的是“是否能夠實現參數個數可變的C語言功能”時,基本上可以給出一個可以的答案。

在C語言中,參數個數可變的函數功能實現依賴於幾個stdarg.h中定義的宏。在使用的.行為上,它們看起來像是函數。幾個宏清單如下:

va_list:行為有點像數據類型

va_start:行為有點像函數,參數為va_list類型的參數表以及參數個數

va_arg:行為像函數,參數為va_list參數表以及參數數據類型

va_end:行為像函數,參數為va_list的參數表

  示範代碼如下;

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include"stdio.h" #include"stdarg.h" float avrg(intarg_num,...); int main(void) { printf("avrg value is:%f",avrg(4,1,5,3,6)); return 0; } float avrg(intarg_num,...) { va_list args; int i = 0; int sum = 0; float avrg_value = 0.0f; va_start(args,arg_num); for(i = 0;i < arg_num;i++) { sum += va_arg(args,int); } avrg_value = (float)sum / arg_num; va_end(args); return avrg_value; } 編譯運行以及驗證結果如下: E:WorkSpace