这个函数怎么用???

priest2010 priest2010 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个函数在被调用的时候有时有3个参数,有时有4个、5个参数,这是怎么回事,怎么去分辨使用,还有这个函数的具体的作用是什么,请高手帮忙看看……
#define va_start(ap,v) ( __va_start(&ap, _ADDRESSOF(v), _SLOTSIZEOF(v), \
__builtin_alignof(v), _ADDRESSOF(v)) )
#define va_arg(ap,t) ( *(t *)__va_arg(&ap, _SLOTSIZEOF(t), \
_APALIGN(t,ap), (t *)0) )
#define va_end(ap) ( __va_end(&ap) )

bool CUSBCommunicator::SendCommand(BOOL bWaitResponse,BYTE nCmdId,BYTE nParamCount,...)
{
BYTE szCmdString[128],*pCmdString=szCmdString;

memset(pCmdString,'0',20);//定长命令
*pCmdString++=0x1b;
*pCmdString++=nCmdId;
*pCmdString++=0x30+nParamCount;//参数个数
va_list list=va_start(list,nParamCount);
for(int i=0;i<4;i++)
{
if(i<nParamCount)//16 进制数...
{
WORD param=va_arg(list,WORD);
sprintf((char *)pCmdString,"%04x",param);
}
pCmdString+=4;
*pCmdString='0';//由于sprintf在末尾添加了结束标志,需要修改为'0'
}
va_end(list);
*pCmdString++=0;
long nCmLength=pCmdString-szCmdString;
return SendCommand(szCmdString,nCmLength,bWaitResponse);
}
...全文
评论 5
收藏 已收藏
分享
返回顶部
priest2010
VC/MFC 16,550 成员 421,606 内容