5

私はいつも、プログラミングで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ビットを分離します。

ここで何が起こっているかについて何かアイデアはありますか?

4

3 に答える 3

18

これは実際にはgotoとは何の関係もありません。演算子の優先順位の問題があります。ビット単位および(&)は、等式(==)よりも優先順位が低くなります。結果として、あなたは実際にやっていif ((myInt>>22) & (7 == X))ます。

これを修正するには、いくつかの親を追加するだけですif ((myInt>>22) & 7) == X)

于 2010-10-22T20:18:04.773 に答える
2

'=='演算子は、C / C ++の'&'よりも優先順位が高くなります。

if ( ((myInt>>22) & 7) == X)代わりに試してください

于 2010-10-22T20:20:35.343 に答える
2

それは、ラベルと対応するものが関数の外で宣言され}ていると私に思わせることがわかります。printfもちろん、それを行うことはできません..とにかくメソッド内にある必要があります。

(これは単なる推測です。他の回答が述べているように、他の問題が発生していることもわかります:)

于 2010-10-22T20:16:33.687 に答える