如何在C中的用户定义函数中传递任意数量的参数?该函数的原型是什么?它类似于printf,它可以接受任意数量的参数。
答案 0 :(得分:7)
查看here示例。
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
int maxof(int, ...) ;
void f(void);
main(){
f();
exit(EXIT SUCCESS);
}
int maxof(int n args, ...){
register int i;
int max, a;
va_list ap;
va_start(ap, n args);
max = va_arg(ap, int);
for(i = 2; i <= n_args; i++) {
if((a = va_arg(ap, int)) > max)
max = a;
}
va_end(ap);
return max;
}
void f(void) {
int i = 5;
int j[256];
j[42] = 24;
printf("%d\n",maxof(3, i, j[42], 0));
}
答案 1 :(得分:0)
这样的函数是可变的变量函数,但是这些函数比最初看起来的函数要少得多。关于这个主题的wikipedia page并不错,并且有C代码。
这些函数的基本问题是参数的数量实际上不可变 - 它们必须在编译时通过已知参数来修复。这在printf中很明显:
printf(“%s%d”,“Value is”,42);
%说明符的数量必须与实际值的数量匹配,对于C中的可变参数函数的所有其他用途,这种情况都适用于这种形式。