首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有可变参数列表C++的代码优化问题

具有可变参数列表C++的代码优化问题
EN

Stack Overflow用户
提问于 2010-08-02 21:50:43
回答 1查看 497关注 0票数 0

我正在使用Visual Studio C++ 2010学习版。我用变量参数列表做了这个函数:

代码语言:javascript
复制
BOOL Send(SOCKADDR_IN toAddr, LPTSTR command, LPTSTR first, ...) {
 if (g_udpSocket == INVALID_SOCKET || command == NULL)
  return FALSE;

 va_list args; 
 va_start(args, command);
 LPTSTR str = va_arg(args, LPTSTR);
 TCHAR szData[DEFAULT_STR_LEN] = {0};
 _tcscpy(szData, command);      
 while (str != NULL) {
  _tcscat(szData, TEXT(" "));
  _tcscat(szData, str);
  str = va_arg(args, LPTSTR);
 }
 va_end(args);

 TCHAR szEncrypted[DEFAULT_STR_LEN] = {0};
 DWORD bytesEncrypted = EncryptString((LPBYTE)szData, _tcslen(szData) * sizeof(TCHAR), (LPBYTE)szEncrypted, DEFAULT_STR_LEN * sizeof(TCHAR));

 return sendto(g_udpSocket, (char*)szEncrypted, bytesEncrypted, 0, (SOCKADDR*) &toAddr, sizeof(toAddr)) > 0;
}

示例调用:

代码语言:javascript
复制
Send(g_listener, CMD_APP, currentAppTitle, NULL);

我使用NULL来表示参数列表已结束。在调试配置下,一切运行正常,但是当我切换到发布优化时,会弄乱变量参数。任何类型的优化都不起作用(/Od、/O1、/O2等)。

尽管我使用的是TCHAR宏,但该项目并没有使用UNICODE或MBCS。

如何保持优化(最小化大小)并使变量参数列表工作?

谢谢,Arth

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-02 21:53:01

va_start()宏会初始化ap,以便随后由va_arg()和va_end()使用,并且必须首先调用。

最后一个参数是变量实参列表之前的最后一个参数的名称,也就是调用函数知道其类型的最后一个参数。

您的代码为:

代码语言:javascript
复制
BOOL Send(SOCKADDR_IN toAddr, LPTSTR command, LPTSTR first, ...) {

  /* ... */

  va_start(args, command);

command应为first,或者应删除first参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3388387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档