疑难杂症--不定参数如何多重传递?
本帖最后由 ccy668 于 2011-12-26 16:16 编辑各位大侠,最近想自己实现一个可以控制打印等级的调试程序,其实在很多程序中已经实现了,但看了几个例子都觉得不够灵活,它们实现了打印等级的控制,但打印的参数个数都是固定的,现在想自己改良一下,思路如下:
函数定义:
void debug(int level, const char * __format, ...);
//函数原形和printf类似,只是第一个参数level为打印等级,分为5级,用宏定义将1~5分别对应:error,warning,info,debug,log
函数实现部分:
void debug (int level, const char * __format, ...)
{
int debug_level; //这个变量控制打印输出等级,变量值从系统环境变量或应用程序的运行参数得到。
debug_level = get_debug_level(); //从环境变量或运行参数等地方获取debug_level的值
if (level <= debug_level) //如果设置的调试等级大于程序打印等级,则打印
{
printf (const char * __format, ...); //将debug函数的实参传递到这里,再调用printf打印,问题点也就是在这里
}
}
问题的关键就在于如何将debug函数的实参传递到printf,请各位赐教,谢谢! 看linux源码中printk的实现吧 已找到方法,结贴,谢谢2楼!
void formatoutput(char * format,...)
{
char s;
va_list arg_ptr;
va_start(arg_ptr,format);
_vsnprintf(s,strlen(s),format,arg_ptr);
printf("%s",s);
}
或者
void myprint(const char * format,...)
{
va_list vlist;
va_start(vlist,format);
int pos;
for(pos=0;pos<strlen(format)-1;pos++)
{
if(format=='%')
{
switch(format)
{
case 'd':
cout<<va_arg(vlist,int);
break;
case 's':
cout<<va_arg(vlist,char *);
break;
default:
break;
}
pos++;
}
else
putchar(format);
}
va_end(vlist);
}
页:
[1]