ccy668 发表于 2011-12-26 16:12

疑难杂症--不定参数如何多重传递?

本帖最后由 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,请各位赐教,谢谢!

yyplc 发表于 2011-12-26 17:08

看linux源码中printk的实现吧

ccy668 发表于 2011-12-26 18:02

已找到方法,结贴,谢谢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]
查看完整版本: 疑难杂症--不定参数如何多重传递?