C ++ If语句已跳过

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ If语句已跳过相关的知识,希望对你有一定的参考价值。

我正在使用两个ABB来实现冲突解决,但是似乎“ if(* yDepth> 0)”被编译器完全跳过了。当我在Visual Studio中将断点应用于该语句时,它回答“此断点当前不会被命中。指针是否有问题?我试图移动该语句的内容,更改条件,但它似乎总是跳过if有问题的陈述。

Vector2* normal = new Vector2();
Vector2* vFrom1to2 = new Vector2();
*vFrom1to2 = Vector2(b->getX() - a->getX(), b->getY() - a->getY());
float* xDepth = new float();
*xDepth = (a->getWidth()) + (b->getWidth()) - abs(vFrom1to2->x);
float* yDepth = new float();


if (*xDepth > 0) 

    *yDepth = (a->getHeight()) + (b->getHeight()) - abs(vFrom1to2->y);
    std::cout << "break";
    if (*yDepth > 0)  //this statement is skipped completely. yDepth is greater than 0 on testing.

        if (xDepth < yDepth) 
            if (vFrom1to2->x < 0) 
                normal->x == -1;
                normal->y == 0;
            
            else 
                normal->x == 1;
                normal->y == 0;
            

        
        else 
            if (vFrom1to2->y < 0) 
                normal->x == 0;
                normal->y == -1;
            
            else 
                normal->x == 0;
                normal->y == 1;
            

        

    



答案

在发布模式下-更确切地说,在优化处于启用状态时-编译器可以重新排序,重新排列,合并甚至删除代码行。这意味着您编写的代码行与实际生成的机器代码之间不再存在一对一的对应关系。这可能意味着某些代码行不能再分配断点,调试器在单步执行代码时可能会跳过。

通常,由于这个原因,最好在调试模式下进行调试。如果无法做到这一点,请在您感兴趣的行附近设置一个断点,并从此处开始逐步执​​行代码,而不是在您感兴趣的确切行上。

((读者注意:提问者澄清说他们在发布模式下遇到此问题)

以上是关于C ++ If语句已跳过的主要内容,如果未能解决你的问题,请参考以下文章

java: if 语句跳过下面的 if 语句

转换器练习:跳过 if 和 else if 语句 [关闭]

求一些C语言if嵌套语句算法题

c语言入门教程–-8循环控制语句

C Primer Plus学习笔记- C 控制语句:分支和跳转

C 语言 - 分支跳转和循环语句