阿男bluedash 发表于 2013-1-26 12:32:24

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]
查看完整版本: Linux编程每周一讲 -可变长度参数