拥有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)
我做错了什么?
;从你的结尾删除#define.目前,预处理器在您使用的任何地方插入分号SYS_STATE_IDLE,这是您不想要的.
#define SYS_STATE_IDLE 0
Run Code Online (Sandbox Code Playgroud)