if ((!m_pMediaPage->PageLayer() || !m_pMediaPage->LoadState()) &&
!m_pMediaPage->m_bRequestList)
{
GetListInfo();
m_pMediaPage->m_bRequestList = TRUE;
}
当所有值为 0 时,GetListInfo() 不会被执行。
PageLayer() 和 LoadState() 返回整数,m_bRequestList 是一个整数。
基本上重写为:
if ((!0 || !0) && !0) -or- if ((1 || 1) && 1)
我只能假设 if 语句计算的值与调试器所看到的不一样。
我正在使用 visual studio 2005 并在第 1 行和第 4 行放置断点来检查值并查看它是否执行到 if 语句中。我不确定如何调试它。
就像我说的,调试器在断点 1 处查看时,这 3 个值中的每一个都是 0。
.h 中的函数:
int PageLayer() {return m_iCurrentLayer;} - protected
BOOL LoadState() {return m_bLoadDone;} - protected
bool 值:
typedef int BOOL;
最佳答案
如果从不同函数返回的所有值都返回零,则此条件语句看起来好像会被执行。如果函数体没有执行,我会按如下方式调试问题:
在
if
语句之前记录所有函数的值:std::cout << "page-layer=" << !m_pMediaPage->PageLayer() << ' ' << "load-state=" << !m_pMediaPage->LoadState() << ' ' << "request-list=" << !m_pMediaPage->m_bRequestList << '\n';
是的,调试器也应该显示这些值,但我非常相信打印的值是实际评估的值。
如果这不能提供必要的洞察力来了解问题出在哪里,我会开始将条件分解为单独的部分并在每个级别验证是否成功,例如:
if (!m_pMediaPage->PageLAyer()) { std::cout << "page-layer is not set\n";\ } if (!m_pMediaPAge->LoadState()) { std::cout << "load-state is not set\n"; ...
如果这仍然没有给出任何见解,我会开始怀疑这些函数返回了有趣的值,并且我会验证不同的结果是否是有趣的值,并且我会在使用预处理后开始查看输出
-E
选项。
关于c++ - 简单的 if 语句在应该评估时未评估为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925268/