C語言中實現參數個數可變函數
- C語言
- 關注:5.48K次
導語: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 |