这些类型的函数称为可变参数函数 (维基百科链接 https://en.wikipedia.org/wiki/Variadic_function)。他们使用省略号(即三个点)来指示函数可以处理的参数数量可变。您可能使用过此类函数的一个地方(也许没有意识到)是与各种printf
函数,例如(来自 ISO 标准):
int printf(const char * restrict format, ...);
省略号允许您创建事先未知参数数量的函数,并且您可以使用stdargs.h
功能 (va_start
, va_arg
and va_end
) 来获取具体参数。
你必须知道types您提取的论点的一部分,并有某种方式决定何时完成。这printf
函数使用格式字符串(对于类型和计数)来执行此操作,而下面的示例代码始终假设const char *
作为具有哨兵值的类型NULL
来决定完成。
这个链接here http://www.eskimo.com/%7Escs/cclass/int/sx11b.html有一篇关于变量参数列表使用的很好的论文printf
.
作为示例,以下程序包含一个函数outStrings()
,这允许您打印任意数量的字符串:
#include <stdio.h>
#include <stdarg.h>
void outStrings(const char *strFirst, ...) {
// First argument handled specially.
printf("%s", strFirst);
va_list pArg;
va_start(pArg, strFirst);
// Just get and process each string until NULL given.
const char *strNext = va_arg(pArg, const char *);
while (strNext != NULL) {
printf("%s", strNext);
strNext = va_arg(pArg, const char *);
}
// Finalise processing.
va_end(pArg);
}
int main(void) {
char *name = "paxdiablo";
outStrings("Hello, ", name, ", I hope you're feeling well today.\n", NULL);
}