我阅读了关于 va_start 的手册页并得到了这个:
参数 last 是变量参数列表之前最后一个参数的名称,即调用函数知道其类型的最后一个参数。
因为这个参数的地址可以在 va_start() 宏中使用, 所以它不应该被声明为寄存器变量,或者函数或数组类型。
我尝试了这段代码,它运行良好,但它只是让我感到困惑。
#include <stdio.h> #include <stdarg.h> void va_func(int i[3],...); int main() { int m[3] = {0,1,2}; va_func(m,4,5,5,6); return 0; } void va_func(int m[5],...)// I pass a array type here before the "..." { int i,j; va_list ap; va_start(ap,m); for(i = 0; i < 4 ;i++) { j = va_arg(ap,int); printf("argv[%d] is %d\n",i,j); } va_end(ap); }
然后我想阅读那些
va_*
宏的代码。但我从<stdarg.h>
and什么也没得到<cstdarg>
。任何黑客都可以告诉我如何以及在哪里可以学习这些va_*
东西吗?
这是我目前的问题:
我想写一个Open(const char *path,int oflag, ...);
函数。我希望它调用open
并做一些错误测试。
int Open(const char * path,int oflag, ...)
{
int rt;
rt = open(path,oflag,...)// I don't know how to do this now.
if(rt == -1)
err_deal_func();
else
return rt;
}