打印
[嵌入式linux]

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

[复制链接]
3180|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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[100];
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[pos]=='%')
   {
    switch(format[pos+1])
    {
    case 'd':
     cout<<va_arg(vlist,int);
     break;
    case 's':
     cout<<va_arg(vlist,char *);
     break;
    default:
     break;
    }
    pos++;
   }
   else
    putchar(format[pos]);
}
va_end(vlist);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

100

帖子

1

粉丝