0

現在、コードに問題があります。&& でボタンをチェックしたいのですが、ケースでそれらを参照することはできません。

#include "n64.h"
#include "explode.h"

MarioStruct *Mario = (void*)M64_MARIO_STRUCT;

void _start() {
    asm volatile("la $gp, _gp");
    switch(Mario->pad->currentButton && )
    {

    case BUTTON_D_DOWN:
        PrintXY(80, 80, "1, 2, 3");
        break;
    case BUTTON_D_UP:
        PrintXY(80, 80, "Oh Hi");
        break;
    case BUTTON_D_LEFT:
        PrintXY(80, 80, "Lollol");
        break;
    case BUTTON_D_RIGHT:
        PrintXY(80, 80, "Noodle");
        break;
    default:
        PrintXY(80, 80, "Default Msg");
        break;
    }
}

では、そのスイッチ (Mario->pad->currentButton &&) をケースに入れるにはどうすればよいでしょうか? 例: If ステートメントでどのように見えるか:

if(Mario->pad->currentButton && BUTTON_D_DOWN)
4

2 に答える 2

3

caseラベルの値は定数でなければならないため、これはできません。

値が結合されたビットフラグである場合、switch()チェックする単一の値がないため、 a を使用してそれをチェックすることはできません。

また、ここでの使用は間違っていると思います。これはブール値 (ロジック) であり、どちらがビット単位でマスキングに使用さ&&れるかのように聞こえます。&

ビットの場合は、if:s の「レーキ」が適切な方法です。

私が (遠い!) 過去に使用したトリックの 1 つは、ビットマスクをインデックスとして解釈し、そのインデックスを使用して関数ポインターのジャンプ テーブルを読み取り、責任のある関数に直接移動することです。しかし、最近ではそのようなことをする理由はあまりありません。

于 2013-10-23T12:36:28.723 に答える