C语言中不定参数函数的使用
由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦。C语言中实现不定参数函数的问题是利用调用函数时使用的堆栈来解决。原理是通过堆栈读取可选参数的值,直到读取到所设定的结束标志为止。 下面程序的可选参数的结束标志设置为可选参数参数小于0。
在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) //第一个可选参数地址#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //返回ap地址处的值,同时ap指向下一个可选参数的地址#define va_end(ap) ( ap = (va_list)0 ) // 将指针置为无效/*main调用test函数堆栈的分布如下图: 地址:高 ............... | ...............|第二个可选的参数 |第一个可选的参数 |j|i低 test的返回地址*/