关于c ++:goto代码行无法执行

goto line of code failing to execute

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
       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\
"
);
    goto end;
b:
    printf("this never executes\
"
);
    goto end;
c:
    printf("nor does this\
"
);
    goto end;
end:
    //more code

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

关于这里发生的事情有什么想法吗?


实际上,这与goto无关。 您遇到了运算符优先级问题。 按位与(&)的优先级低于等于(==)的优先级。 结果,您实际上正在执行if ((myInt>>22) & (7 == X))

要解决此问题,只需添加一些括号:if ((myInt>>22) & 7) == X)


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

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


我看到}使我认为标签和相应的printf在函数外部声明。 当然,您不能这样做。.无论如何,它们必须位于方法内部。

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