您如何在C中的#Define语句中包括括号



假设我有一个函数c。

uint8_t readPin(uint8_t);
uint8_t readPin(uint8_t pin_num)
{
    switch pin_num
    {
        case 0:
            return(PORTAbits.RA3);
            break;
        case 1:
        ...and so on
    }
}

我想使用更人性化的名称(可以重新命名)调用PIN。例如,我想写作:

openDoor();

致电

readPin(2);

我尝试使用

#define openDoor() readPin(2)

但由于括号而行不通。有人对如何最好地做到这一点吗?我不能仅仅重命名readpin函数,因为我想拥有超过1个不同的别名,具体取决于我包含的标头文件。

#define openDoor() readPin(2)

您拥有的很好。宏可以有参数列表,甚至可以使用空的参数列表,因此这将完成您想要的工作。

但是,我警告不要这样使用预处理器。最好避免使用预处理器,尤其是当语言可以做完全相同的事情时。一方面,调试者看不到预处理器宏。

void openDoor()
{
    readPin(2);
}

#define openDoor() readPin(2)

它应该可以正常工作。因为,#define仅用于替换它在何处找到替换令牌,并在编译预处理之前为其定义的适当值替换。

所以,如果您编写openDoor(),则在汇编之前将替换为readPin(2)

最新更新