c语言中可变参数
时间:2011-05-10 来源:jiyizhen3721
它除了有一个参数format固定以外, 后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符), 实际调用时可以有以下的方式:
以上这些东西已为大家所熟悉。 但是究竟如何写可变参数的c函数以及这些可变参数的函数编译器是如何完成, 这个问题却一直困扰了我好久。 本文就这个问题进行一些讨论, 希望能对大家有些协助.
先看例子程序。 该函数至少有一个整数参数, 其后是占位符…, 表示后面参数的个数不定. 在这个例子里, 所有的输入参数必需都是整数, 函数的功能是打印所有参数的值.
函数代码如下:
//示例代码1:可变参数函数的使用
从这个函数的完成可以看到, 我们使用可变参数应该有以下步骤:
C语言⑴在程序中将用到以下这些宏:
这些宏定义在stdarg. h中, 所以用到可变参数的程序应该包括这个头文件.
⑵函数里首先定义一个va_list型的变量, 这里是arg_ptr, 这个变量是指向参数地址的指针. 由于失掉参数的地址之后, 再结合参数的类型, 才能失掉参数的值。
⑶然后用va_start宏初始化⑵中定义的变量arg_ptr, 这个宏的第二个参数是可变参数列表的前一个参数, 也就是最后一个固定参数。
⑷然后依次用va_arg宏使arg_ptr返回可变参数的地址, 失掉这个地址之后, 结合参数的类型, 就可以失掉参数的值。 然后进行输出。
⑸设定完毕条件, 这里的条件就是判断参数值能否为-1。 注意被调的函数在调用时是不知道可变参数的正确数目的, 程序员必需自己在代码中指明完毕条件。 至于为什么它不会知道参数的数目, 读者在看完上面这几个宏的外部完成机制后, 自然就会明白。
文章由口碑最好的缩阴产品整理,收集辛苦,希望能保留出处。