Linux编程每周一讲 -可变长度参数
可变长度参数在C语言里面不算什么新鲜的东西,但是它的应用范围很广,属于基础知识范围,因此将这个话题做为系列文章中的第一篇比较合适。什么是可变长度参数呢?拿printf()来举例:
printf("This is an integer: %d, That is a float: %s", 1, 2.0);
在上面的例子里,printf()接收三个参数,第一个是要打印的字串,里面有两个参数:
* %d
* %s
后面是这两个参数对应的实际值:
* 1
* 2.0
在上面的例子里,printf()接收了三个参数。再看下面这个例子:
printf("Hello, world!");
printf()这次只接收了一个参数。换言之,printf()接收的参数个数是*可变的*。这是如何实现的呢?在C语言里面,我们可以在函数定义时使用 "..." 来定义可变长度参数,比如:
a_function(int i, ...);
先将固定参数写在最前面,后面再用"..."来声明这个函数接收可变长数参数。
然后,我们在函数内部使用stdarg.h里面定义的一个struct和几个宏来实现对可变长度参数的读取:
* va_list
* va_start()
* va_arg()
* va_end()
这个几东西的使用方法非常简单,在stdarg.h的manpage里面说明的很详细。查看stdarg.h的manpage可用下面的命令:
man 3 stdarg
里面有这样一段说明:
<div class="quote_title">引用
页:
[1]