转到无法执行的代码行

时间:2010-10-22 20:12:59

标签: c++ c goto

我一直被教导几乎从不在编程中使用goto语句。但是,作为我最近的编程项目的一部分,我们需要这样做。我有一个带有各种goto语句的if / else语句,并且goto语句无法执行。我不知道为什么。任何帮助将不胜感激。

       int myInt = XXXXXXX;
       if((myInt>>22) & 7 == X)
          goto a;
       else if((myInt>>22) & 7 == Y)
          goto b;
       else if((myInt>>22) & 7 == Z)
          goto c;
a:
    printf("this always executes\n");
    goto end;
b:
    printf("this never executes\n");
    goto end;
c:
    printf("nor does this\n");
    goto end;
end:
    //more code

比特移位的简要说明等:我们正在实现计算机处理器,需要查看25位操作码的前3位。所以(myInt>> 22)& 7隔离了操作码中的3位。

关于这里发生了什么的任何想法?

3 个答案:

答案 0 :(得分:18)

这实际上与goto无关。你有一个运营商优先问题。按位和(&)的优先级低于等式(==)。结果,你实际上在做if ((myInt>>22) & (7 == X))

要修复它,只需添加一些parens:if ((myInt>>22) & 7) == X)

答案 1 :(得分:2)

我看到}让我觉得标签和相应的printf是在函数外声明的。当然你不能这样做..无论如何他们必须在一个方法里面。

(这只是一个猜测,也因为我看到你有其他问题,因为其他答案陈述:)

答案 2 :(得分:2)

'=='运算符的优先级高于'&'在C / C ++中。

尝试使用if ( ((myInt>>22) & 7) == X)