c++ - 简单的 if 语句在应该评估时未评估为真

标签 c++ debugging if-statement visual-studio-2005 logic

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;

最佳答案

如果从不同函数返回的所有值都返回零,则此条件语句看起来好像会被执行。如果函数体没有执行,我会按如下方式调试问题:

  1. if 语句之前记录所有函数的值:

    std::cout << "page-layer=" << !m_pMediaPage->PageLayer() << ' '
              << "load-state=" << !m_pMediaPage->LoadState() << ' '
              << "request-list=" << !m_pMediaPage->m_bRequestList << '\n';
    

    是的,调试器也应该显示这些值,但我非常相信打印的值是实际评估的值。

  2. 如果这不能提供必要的洞察力来了解问题出在哪里,我会开始将条件分解为单独的部分并在每个级别验证是否成功,例如:

    if (!m_pMediaPage->PageLAyer()) {
        std::cout << "page-layer is not set\n";\
    }
    if (!m_pMediaPAge->LoadState()) {
        std::cout << "load-state is not set\n";
    ...
    
  3. 如果这仍然没有给出任何见解,我会开始怀疑这些函数返回了有趣的值,并且我会验证不同的结果是否是有趣的值,并且我会在使用预处理后开始查看输出-E 选项。

关于c++ - 简单的 if 语句在应该评估时未评估为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925268/

相关文章:

c++ - 解决编译器错误 : pointer potentially uninitialized

c++ - OpenSSL : Encrypt a symmetric key with an ECC public key

c++ - CHtmlEditCtrl : Windows is destroyed on ShowWindow(SW_HIDE)

c++调用没有点或this指针运算符的函数调用

c++ - 您可以使用断言来测试 C++ 中的类型定义吗?

python - 基于另外两个变量创建变量

c++ - 从父线程继承全局值

javascript - 有没有办法记录在 javascript 中创建了多少个实例?

c - 程序,它将找出其他程序的性能/属性。

php - 如何在 PHP 函数中执行 if 语句?