如何计算在以下程序中传递给函数的参数的数量:
#include<stdio.h>
#include<stdarg.h>
void varfun(int i, ...);
int main(){
varfun(1, 2, 3, 4, 5, 6);
return 0;
}
void varfun(int n_args, ...){
va_list ap;
int i, t;
va_start(ap, n_args);
for(i=0;t = va_arg(ap, int);i++){
printf("%d", t);
}
va_end(ap);
}
Run Code Online (Sandbox Code Playgroud)
这个程序在ubuntu 10.04下通过我的gcc编译器输出:
234561345138032514932134513792
Run Code Online (Sandbox Code Playgroud)
那么如何找到多少没有.实际传递给函数的参数?
编译一些具有函数原型的遗留代码Ac
void somefun(...)
Run Code Online (Sandbox Code Playgroud)
gcc 4.1.2总是说出错误
error: ISO C requires a named argument before ...
Run Code Online (Sandbox Code Playgroud)
但我无法修改代码,所以我应该使用什么C dialet选项让GCC编译这段代码?
gcc -c A.c ????
Run Code Online (Sandbox Code Playgroud) 可能重复:
是否可以在C中具有可变参数函数且没有非可变参数?
是否可以创建没有参数的C varargs函数?
例如:
int foo(...);
Run Code Online (Sandbox Code Playgroud)
我想做类似以下的事情:
list* create_list(...){
list *mylist = list_create();
void *current_arg = va_arg(void*);
while (current_arg != NULL){
list_add(mylist, current_arg);
current_arg = va_arg(void*);
}
return mylist;
}
Run Code Online (Sandbox Code Playgroud)