在 IAR IDE 中需要一个“)”

expected a ")" in IAR IDE

我在 CPU_state == cpuStateOff 处收到错误 Error[Pe018]: expected a ")"
当我将 cpuStateOff 更改为 0 时就可以了。不知道为什么。

在我的 PERIPHERAL_APP.h:

#ifndef __PERIPHERAL_APP_H
#define __PERIPHERAL_APP_H
// CPU state
#define CPU_STATE_OFF     0;
#define CPU_STATE_ON      1;
#endif

在我的main.c中:

#include "PERIPHERAL_APP.h"
void main( void )
{
    initMSP430();  
    _EINT();                              
    for (;;)
    {
        if (cpuState == CPU_STATE_OFF ) // The error is hear 
        {
            __bis_SR_register(LPM3_bits);
        }
        else
        {
            __bis_SR_register(LPM0_bits); 
        } 
    } 
}

预处理器宏不是 C 语句,因此不需要像 ;.

这样的语句终止符

发生的事情是,当预处理器替换宏 cpuStateOff 时,它使用宏的 whole 主体,即 0;,这导致代码如下

if (CPU_state == 0; ) // Code after macro replacement

大多数编译器和环境都有在预处理后停止的选项,如果您使用它,您可以确切地看到编译器 "proper" 将看到的代码。