C可变参数用法以及自己的Message()函数

首先,关于可变参数,实际上,也就是未知参数个数,在调用的时候再解析。我的理解是C总会把参数放到函数堆栈,那么,虽然声明函数 的时候不知道参数个数,但可以在使用时指明,并根据指出的参数进行解析,操作。

解析这种参数使用va_list宏,用法如下:

 1. 声明va_list,
 2. 使用va_start()取得参数"..."地址                     
 3. 使用va_arg()取得下一参数地址 4. 使用va_end()结束解析                   
 如                                                                   
 va_list args;                        //声明变量                       
 va_start(args,  before);             //开始解析。args指向before后面的参数
 参数类型 var=va_arg(args,  参数类型);//取下一个参数并返回。args指向下一个参数
 va_end(args);                                                        

完全可以自己写format,并且解析"...",自己写出类似printf的函数,不过目前我不需要如此高端,下面是利用可变参数的一个简单例子,仅仅对需要打印的message做一下标记,并且可以留作以后修改(而不需要对所有代码修改)(比如,想改变格式,想改变打印方式,不在屏幕打印,而是用callback或者log到文件,等等)
int Error( const char *format, ... )
{


va_list ap;
int retval;
va_start(ap,format);
printf("[ERROR] ");
retval = vprintf(format,ap);
printf("\n");
va_end(ap);
return retval;
}


我经常用到的例子:

void TRACE(LPCSTR szFormat, ...)
{

	CHAR szBuffer[1024];
	
	va_list pArgs; 
	va_start(pArgs, szFormat);
	vsprintf(szBuffer, szFormat, pArgs);
	va_end(pArgs);

	OutputDebugString(szBuffer); 
}


用法:

TRACE(" CKM_DES_ECB mech->ulParameterLen %d",mech->ulParameterLen);
TRACE("enter  encr_mgr_encrypt_update\n");



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值