C语言中的可变参数函数
来源:互联网 发布:北京中科院软件中心 编辑:程序博客网 时间:2024/04/27 18:27
先来个例子,后面再说明
上面的程序我在vc6.0编译通过
现在说一下可变参数的用法
第一步:函数声明 functionname(char * format, ...)
第二步:定义va_list 变量 ap;
第三步:使ap和参数列表关联起来va_start(ap,format);
第四步:你可以按照参数列表即format字符串接收你的参数。
使用va_arg(ap, 参数类型);
va_arg宏会按照参数类型从ap中依次取得一个你传入的变量值,
在例子中,我没有按照format进行格式读取,我想这个不影响你对变参数的理解。
程序的最后使用va_end(ap);释放掉ap;
原理:(一种可能的实现方法)
假设参数压栈为从前往后从下往上;
即test(a,b,c,d);
会先压a入栈最后压d;
而栈低指针小于栈顶指针;
于是
typedef char * va_list;
#define va_start(ap,v) ( ap = (va_list)&v + sizeof(char*))
#define va_arg(ap,t) ((t *)(ap += sizeof(t))[-1]
#define va_end(ap) ( ap = (va_list)0 )
另外:
1、设置缓存setbuf(stdout, buf);
2、INT_MAX等宏在 limits.h中定义
3、文件A.c中定义了char str[] ="test";在其他文件中使用,则如下声明 --> extern char str[];或c++中的const char *str;
4、 errno 保存着错误编号
以上仅是理论,实际中很少直接写变参函数,都是变相调用系统函数实现。实现模板如下
int writeFormat(char* format, ...){va_list ap;char string[1024];va_start(ap,format);int size = vsprintf(string,format,ap);va_end(ap); // 这里对格式化后的字符串进行处理return 0;}
- C语言中的可变参数函数
- C语言中的可变参数函数
- C语言中的参数可变函数
- C语言中的可变参数函数
- C语言中的可变参数函数
- 实现c语言中的可变参数函数
- C语言中的可变参数函数
- C语言函数参数中的省略号(可变参数)
- c语言可变参数函数
- C语言函数可变参数
- C语言可变参数函数
- C语言可变参数函数
- C语言可变参数函数
- C语言可变参数函数
- C语言可变参数函数
- C语言可变参数函数
- C语言中的可变参数
- C语言中的可变参数
- delphi中Label文字居中之方法
- Java本纪之Java虚拟机的10年
- 在这个自由平台共同分享
- 借用 疯狂秀才 的页面,修改了一下自然框架后台管理的页面。
- IHttpModule接口 说明
- C语言中的可变参数函数
- hdu 1711 Number Sequence
- 网上标注地图被指泄密 网友提出质疑
- VC++热键注册
- hdu 1711 Number Sequence
- C++0x:VC10编译器的bug
- 静静地
- hdu 1709 The Balance
- android and arm