移动'&&'进入开关

时间:2013-10-23 12:34:39

标签: c

我目前的代码存在问题。我想要的是用&&来检查按钮,但是在这种情况下我不可能引用它们。

#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)

2 个答案:

答案 0 :(得分:3)

您不能这样做,因为case标签的值必须是常量。

如果您的值是组合的位标志,则无法使用switch()检查该值,因为没有单个值可供检查。

另外,我认为你在这里使用&&是错误的,这是布尔(逻辑),听起来好像你想要&这是按位并用于屏蔽。

如果它是位,那么if:s的“耙子”确实是正确的方式。

我在(遥远的!)过去使用的一个技巧是将位掩码解释为索引,并使用该索引读取函数指针的跳转表以直接转到负责的函数。但是现在没有太多理由去做这些事情。

答案 1 :(得分:1)

您遇到两个问题:第一个是使用逻辑运算符而不是按位运算符。另一个是你不能用switch语句来做到这一点。

此外,您需要考虑如果同时按下两个按钮会发生什么。使用switch语句,您只能处理其中一个语句。