Перейти к строке кода не удалось выполнить - PullRequest
5 голосов
/ 23 октября 2010

Меня всегда учили почти никогда не использовать операторы goto в программировании. Однако мы обязаны сделать это как часть моего самого последнего проекта по программированию. У меня есть оператор if / else с различными операторами goto, и операторы 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

Краткое объяснение сдвига битов и тому подобное: Мы реализуем компьютерный процессор, и нам нужно посмотреть на первые 3 бита 25-битного кода операции. Итак (myInt >> 22) & 7 выделяет 3 бита в коде операции.

Есть идеи, что здесь происходит?

Ответы [ 3 ]

18 голосов
/ 23 октября 2010

Это на самом деле не имеет ничего общего с goto. У вас есть проблема приоритета оператора. Побитово и (&) имеет меньший приоритет, чем равенство (==). В результате вы на самом деле делаете if ((myInt>>22) & (7 == X)).

Чтобы исправить это, просто добавьте несколько паренов: if ((myInt>>22) & 7) == X).

2 голосов
/ 23 октября 2010

Оператор '==' имеет более высокий приоритет, чем '&' в C / C ++.

Попробуйте if ( ((myInt>>22) & 7) == X) вместо

2 голосов
/ 23 октября 2010

Я вижу, что } заставляет меня думать, что метки и соответствующие printf объявлены вне функции. Конечно, вы не можете этого сделать ... они все равно должны быть внутри метода.

(это всего лишь предположение, потому что я вижу, что у вас есть другие проблемы, как утверждают другие ответы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...