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 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语言函数,只是在函数原型中只是指明了第一个参数的类型,其余的参数类型全都进行了缺省的设置。
-
win8系统安装c语言方法
在win8/win8.1中C语言VC无法运行,那么win8系统安装c语言方法又变成了什么呢?而现在的'计算机都是预装win8/8.1系统,对于比较原始的TurboC是无法运行的,现在应届毕业生小编向大家告诉大家win8系统运行TurboC软件的方法。win8系统安装c语言方法:win8系统运行TurboC...
-
C语言中文件操作详解及实例代码
在文件操作中除了打开操作以及读写操作,还有几种比较常见的操作。以下是本站小编搜索整理的关于这些操作中涉及到的函数,,需要的朋友可以参考本文!想了解更多相关信息请持续关注我们应届毕业生考试网!一.移动位置指针的函数rewind函数和fseek函数,这两个函数的原...
-
如何使用C语言求N的阶乘
使用C语言求N的阶乘的方法是很多小伙伴都想知道的,下面小编给大家介绍如何使用C语言求N的阶乘,欢迎阅读!如何使用C语言求N的阶乘用递归法求N的.阶乘程序调用自身称为递归(recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求...
-
C++ cin输入流详解
标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog4个流对象,cin是输入流,cout、cerr、clog是输出流。下面是小编为大家整理的C++cin输入流详解,欢迎参考~cin是istream类的对象,它从标准输入设备(键盘)获取数据,程...