1.1简单介绍
在C语言中,不但参数的类型可变,参数的个数也是可变的.也就是说,在形参表中可以不明确指定传递参数的个数和类型,一个常见的库函数Printf()就是如此.这种函数称之为变参函数。可变长参数函数的参数数目和类型虽然是可变,但其设计原理与固定参数函数的设计原理是一致的,必须有办法告诉变参函数没有指定的参数的个数和类型。
1.2可变长参数函数的设计方法
在标准文件stdarg.h中包含带参数的宏定义
1
2 3 4 |
typedef
#define #define #define |
(1)可变长参数函数用规定格式定义为“类型函数名(firstfix,…,lastfix,…)”.firstfix,…,lastfix表示函数参数列表中的第一个和最后一个固定参数,该参数列表中至少要有一个固定参数,其作用是为了给变参函数确定列表中参数的个数和参数的类型.
(2)指针类型va_list用来说明一个变量ap(argumentpointer——可变参数指针),此变量将依次引用可变参数列表中用省略号“…”代替的每一个参数.即指向将要操作的变参.
(3) 宏va_start(ap,lastfix)是为了初始化变参指针ap,以指向可变参数列表中未命名的第一个参数,即指向lastfix后的第一个变参.它必须在指针使用之前调用一次该宏,参数列表中至少有一个未命名的可变参数.从宏定义可知其正确性.
(4) 宏va_arg(ap,type)调用,将ap指向下一个可变参数,而ap的类型由type确定,type数据类型不使用float类型.如iap=va_start(ap,int)调用.
(5) 宏va_end(ap)从stdarg.h中看出定义为空,即未定义.其功能完成清除变量ap的作用,表明程序以后不再使用,若该指针变量需再使用,必须重新调用宏va_start以启动该变量.
1.3应用举例
变参类型相同的函数
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 |
#include
#include
//num个int型数相乘
int { } //i个int型数相乘 long { } int { } |