将变量与常量进行比较不起作用?

And*_*iga 0 c constants

拥有PHP和Javascript编程的背景,在某些情况下,有时很难围绕C和C编译器的行为.我刚刚遇到的一种情况(编程AVR ATmega16微控制器)是将变量与定义的常量进行比较,这显然不起作用:

#define SYS_STATE_IDLE 0;
//...

char systemState = SYS_STATE_IDLE;
/...

// Main function body
int main(void) {

    //...

    for(;;) {
        // Determine if a new key was pressed
        if (keyPressed()) {
            switch (systemState) {
                case SYS_STATE_IDLE:
                    break;
                default:
                    break;
            }
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器(AVR GCC)在第一个引发以下异常case:

../SunTrackerMainController.c:103: error: expected ':' or '...' before ';' token
../SunTrackerMainController.c:103: error: expected expression before ':' token
Run Code Online (Sandbox Code Playgroud)

我也试过这if句话:

if (systemState == SYS_STATE_IDLE) {
    // whatever
}
Run Code Online (Sandbox Code Playgroud)

但结果基本相同:

../SunTrackerMainController.c:109: error: expected ')' before ';' token
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Tim*_*Tim 5

;从你的结尾删除#define.目前,预处理器在您使用的任何地方插入分号SYS_STATE_IDLE,这是您不想要的.

#define SYS_STATE_IDLE 0
Run Code Online (Sandbox Code Playgroud)