可变参数的实现方式可变参数给编程带来了很大的方便,在享受它带来的方便的同时,很有必要了解一下其实现方式,在了解编程语言的同时,也可以扩展编程的思路
可变参数的实现要解决三个问题:1
如何调用带有可变参数的函数2
如何编译有可变参数的程序3
在带有可变参数的函数体中如何持有可变参数第一个问题,调用时在可以传入可变参数的地方传入可变参数即可,当然,还有一些需要注意的地方,后面会提到
第二个问题,编译器需要在编译时采用一种宽松的检查方案,,这会带来一些问题,比如对编程查错不利
第三个是我在这里要关心的问题,先以C语言为例分析其实现原理
printf和scanf是C语言标准库中最常见的可变参数函数,printf的签名是intprintf(constchar*format,
表示可变参数,现在模仿printf写一个简单的例子
一、一个简单了例子:#include#includevoidVariableArgumentMethod(intargc,
);intmain(){VariableArgumentMethod(6,4,7,3,0,7,9);return0;}voidVariableArgumentMethod(intargc,
){//声明一个指针,用于持有可变参数va_listpArg;//将pArg初始化为指向第一个参数va_start(pArg,argc);//输出参数for(inti=0;i
=argc;++i){//获取pArg所指向的参数并输出printf("%d,",va_arg(pArg,int));}va_end(pArg);}voidVariableArgumentMethod(intargc,
)是一个可变参数函数,这个函数用于将argc指定个数的可变参数输出
VariableArgumentMethod(6,4,7,3,0