- 论坛徽章:
- 2
|
原帖由 flyingbox 于 2009-4-21 15:02 发表
现在要测试parse_printf_format函数,其中有几句
96: default:
97: /* We have more than one argument for this format spec. We must
98: call the arginfo funct ...
抱歉 …… 真的没看懂那段代码 ……
如果需要自己实现格式控制, 可以使用 stdarg.h 中提供的类型与宏。
声明:
int sum(int count, ... );
实现:
#include <stdarg.h>
int sum(int count, ... ) {
va_list ap; // 实际参数指针
va_start(ap, count); // 初始化, ap将指向count后的参数。
int result = 0;
for (int i=0;i<count;++i ) {
int arg = va_arg(ap,int); // 取出一个int参数。
result += arg;
}
va_end(ap); // 释放ap
return result;
}
那么, 就可以使用这个带有变长参数列表的sum函数了:
int s1 = sum(3,1,2,3);
assert(s1==6);
int s2 = sum(0);
assert(s2==0);
可以通过同样的方式实现 my_printf。
按你的需要, 解析const char* fmt, 并提取参数。
需要注意:
va_end 是必须调用的。
va_arg(ap, type); type不能是 char, signed char, unsigned char, short, unsigned short, float. |
|