|
C语言中有些函数会利用不定参数的方式来取得参数内容,常见的如printf()、sprintf()、execl()等等,其最后参数以......来定义,即代表后面的参数为不定个数的参数内容。不定参数的相关表头文件在/usr/lib/bcc/include/stdarg.h,其定义如下:
问题1:找不到stdarg.h,如何能得到这个头文件?
[php]
typedef char *va_list;
#define va_start(ap,p) (ap=(char *)(&(p)+1))
#define va_arg(ap,type) ((type *)(ap+=sizeof(type)))[-1]
问题2:上面一句后面的-1是用中括号,还是小括号?结合下面的范例说明一下这个宏定义
#define va_end(ap)
范例:
#include <stdio.h>
#indlude <stdarg.h>
void fun(char *s,......)/*......声明不定参数*/
问题3:不定参数用什么符号,用的是句号吗,需要几个点?
{
va_list ap;
问题4:ap是一个指针变量,还是一个字符变量?
int t;
va_start(ap,s);
printf("%s",s);
while((t=va_arg(ap,int)))
问题5:这个循环是如何运行的?
printf("%d",t);
va_end(ap);
}
int main(void)
{
int a=1,b=2,c=3;
fun("test:",a,b,c,NULL);/*以NULL作结束*/
printf("\n");
return 0;
}
[/php]
上面这段来自《Linux C函数库参考手册》
不定参数在linux编程里出现在比较多,所以看了一下,但还不是很清楚,麻烦兄弟解答一下,这里先谢过了! |
|