- 相关推荐
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的参数表
示范代码如下;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #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 1_编程语言 1_C语言exp_04>gcc exp_04.c E:WorkSpace 1_编程语言 1_C语言exp_04>a avrg value is:3.750000 E:WorkSpace 1_编程语言 1_C语言exp_04>python Python 3.6.0(v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] onwin32 Type"help", "copyright", "credits" or"license" for more information. >>> (1 +5 + 3 + 6) / 4 3.75 |
通过上面的结果可以看出,通过这种特定宏的方式可以实现多参数的C语言函数,只是在函数原型中只是指明了第一个参数的类型,其余的参数类型全都进行了缺省的设置。
【C语言中实现参数个数可变函数】相关文章:
C语言中编写可变参数函数09-28
C语言的可变参数问题08-23
C语言中变参函数的实现细节10-09
C语言中指针变量作为函数参数详解07-01
C语言中返回字符串函数的实现方法09-19
C语言main函数的参数07-25
C/C++函数重载与缺省参数05-25
C语言中函数的区分08-30
C语言函数参数传递问题10-17