欢迎来到天天文库
浏览记录
ID:52473105
大小:123.19 KB
页数:2页
时间:2020-03-28
《C语言函数的一种特殊调用方法.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、0语言函数的一种特殊调用方法刘继清黄金花(武汉船舶职业技术学院,湖北武汉430050)[摘要]详细讨论了C语言中函数的实在参数个数不确定时的调用方法,介绍了在此情况下函数的定义、调用等方法的具体形式,最后给出了函数实在参数个数可变情况下的简单应用实例。[关键词】C语言;函数;调用;宏I.问题的提出在计算机的编程语言中,绝大多数编程语言均提供了函数功能。通过函数,可以编制出结构化程度较高、共享性较强的源程序。在C语言中,可以说,离开了函数,就小存在程序。一个程序中至少要有一个函数——1Ilain()函数。使用函数时,我们一般通过对函数实在参数的“值”的修改,达到多次调用同一个函数
2、,实现不同的目标,从而共享这一个函数。通常,在使用函数时,函数参数的个数是确定的,即在定义或声明函数时,函数的形式参数(以下简称为形参)的个数,确定了调用该函数时对应使用的实在参数(以下简称为实参)的个数,实参的个数及类型戍与对应形参的个数及类型一致I-】(C++中函数参数的缺省值及重载问题不在讨论范畴内,下同)。但是,在有些情况下,实参的个数没有办法事先确定,也就是编制某一个共享程度较高的函数时,不能事先确定调用该函数时使用的实参的个数。遇上这样的问题,大多数计算机编程语言显得力不从心。一般的做法是以牺牲函数的共享程度为代价,根据实参的个数的不同,将被调函数编制池多个“副本’
3、’L多个源代码基本相同而函数名、函数形参个数不同的函数。这样显然浪费了计算机的存储空间。能否将这些“副本’,厶并为一个函数,只是通过不同的实参来实现不同的目标,类似于C++的重载【2J?通过观察C语言中的库函数,可以发现,库函数中有这样的情况出现,并且没有出现多个“副本’,(如printf0、scanf0等)。由此可以得到启示,上述问题在用户程序中应当是町以得到解决的。2.C语言中的三个宏(Macro)在C语言中,为了使得源程序编制简单清晰、明了灵活,引进了预处理机制fJ]。编译器(编译程序1在进行实质性编译前,先将某些语句进行预先处理。在预处理命令中有一类称为宏命令的命令,使
4、用宏命令可以解决函数参数表参数个数不同的问题。宏命令分为简单宏命令一不带参数的宏命令和复杂宏命令——带参数的宏命令。在C语言系统中,使用了三个复杂形式的宏命令来处理函数的变长参数表问题。现分别介绍如下:2.1vastart宏命令(1)宏命令的定义形式:#defineva—start(叩,parmN)((void)((ap)=(va_list)((char_FAR+)(&parmN)+size(pannN))))(2)调用形式:voidva_start(va_listap,lastfix);(3)该宏命令的功能:vastart宏命令用来设置叩。使其指向调用该宏命令所在的函数时传递
5、过来的可变参数表中的第一个可变参数。(4)说明:valist的定义如下:typedefvoid—FAR‘va_list;①对于va—list可理解为一个数组,用于存放va_arg、vaend宏命令中所需的信息。②va—start必须在va_arg、va_end第一次使用之前使用。③lastfix为主调函数传递过来的最后一个确定参数的名字(标识符)。2.2va宏命令.arg(1)宏命令的定义形式:#defineva_arg(ap,type)(+(type—FAR+)(((’(char_FAR+_FAR’)&(ap))_bsizcOTl∞))一L-size(type))))(2)调
6、用形式:typeva_arg(va_listap,type);(3)该宏命令的功能:每调用一次vaarg宏,返回一个可变参数表中印所指的值.并将ap自动指向下一个可变参数。(4)说明:①va_arg中的印应与va—start中的印一致。②在va_arg中,不能使用char,unsignedchar及float类型。2.3vaend宏命令(1)宏命令的定义形式:#definevaend(ap)((void)O)(2)调用形式:voidva_end(va_listap);(3)说明:①该命令主要用于正常返回。作者简介:期继清.男,湖北孝毫人,硕士,翻教授,研究方向:计算机技术应用夏
7、软件开发等。‘。——40‘·——②va_end应在va_arg将所有的町变参数读完之后使用。在C语言中,为了使用简单方便,系统一般将上二述三个宏命令定义在一个头文件(stdarg.h)中。处理函数,变长参数表问题时,程序员只需简单地将stdarg.h头文件包含到源程序的相应位置,即可直接使用上述三个宏命令。3.不同参数个数函数的定义与调用3.1定义函数时形参表的形式定义此类函数时,除参数表部分外,其它部分与普通函数的定义完全一致。参数表的形式如下:(形参l,形参2,形参3,⋯)其中,形参的个
此文档下载收益归作者所有