gpt4 book ai didi

c++ - 在 Visual Studio 2008 中使用 _DEBUG 预处理器定义 - C++

转载 作者:行者123 更新时间:2023-11-30 00:58:55 25 4
gpt4 key购买 nike

我有一个使用 Visual Studio 2008 编写的 VC++ 应用程序。出于调试目的,超时值根据构建类型(调试或发布)进行不同的编译。下面的代码示例是我尝试执行此操作的典型示例。

#ifdef _DEBUG
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, INFINITE )) != WAIT_OBJECT_0 )
#else
if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, BAS_THREE_SEC_TIMEOUT )) != WAIT_OBJECT_0 )
#endif
{
/* ... */
}

调试配置在预处理器定义中定义了 _DEBUG。发布配置没有它。对于每个相应的配置,预期的行是灰色的(大概是表示另一行将被编译)。

但是,在运行时,Release 构建超时保持INFINITE。当我尝试在两个 if 语句上设置断点并尝试运行 Release 代码时,第一个 if 语句上的断点仍然存在,而另一个断点向下移动到括号内的第一行。

什么给了?我如何使这个编译选项起作用?我应该使用其他东西吗?

最佳答案

也许是这样的?

#ifdef _DEBUG
#define NONMS_WAIT_TIMEOUT INFINITE
#else
#define NONMS_WAIT_TIMEOUT BAS_THREE_SEC_TIMEOUT
#endif

if ( (dwObjectWaitState = ::WaitForSingleObject( m_hValidMsgRxdEvent, NONMS_WAIT_TIMEOUT)) != WAIT_OBJECT_0 )
{
/* ... */
}

编辑:VS 中的调试版本应定义 _DEBUG,发布版本应定义 NDEBUG。检查您的项目预处理器指令以确保这是您所拥有的。

关于c++ - 在 Visual Studio 2008 中使用 _DEBUG 预处理器定义 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5318505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com