當前位置:才華齋>計算機>C語言>

C語言中實現引數個數可變函式

C語言 閱讀(7.2K)

導語: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