代码调试利用va_list,va_start,snprintf,va_end

在linux下的开源项目里,特别是用C/C++编写的程序,一般都有debug.h、debug.c文件,这个文件里的函数格式都差不多,格式一般如下:

DebugMessagePrint(char *fmt,...);//注意是三个点省略号。

或者DebugMessagePrint(...,char *fmt,...);//第一个省略号的参数确定,第二个省略号不确定,有fmt格式确定。

 

上面的函数里面的内容大体如下;

 

DebugMessagePrint(char *fmt,...)

{

char buf[MAX-SIZE];

 

va_list  ap;

 

///....................

 

va_start(ap,fmt);

 

snprintf(buf,MAX-SIZE,fmt,ap);

 

va_end(ap);

 

}

 

 

ps:va_list,va_start,va_end工作原理探究

 

大家都知道不同的编译器对函数调用规约(calling convention)很多时候不同,但默认都是_cdecl调用规约,(调用规约一般有三种,_cdecl ,__stdcall等,它是用来做一些动作,比如在编译时让函数参数入栈顺序(是坐到右,还是右到左入栈)、产生函数名用不同的格式)。gcc是用__cdecl调用规约,即参数右到左入栈的方式。

 

详细见:http://www.cppblog.com/qiujian5628/archive/2008/01/21/41562.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值