在宏中定义函数(在C中)

在宏中定义函数(在C中),c,macros,C,Macros,我需要将宏定义为函数。例如: #define REGISTER 0x80000000 ... writel(addr, nic->regs + REGISTER); // arguments are address and register 我是这样定义的: #define WRITEL(addr, nic->reg + reg) ((writel(addr, nic->regs + (reg)))) 这里怎么了? 谢谢宏参数有点像普通函数参数。在左侧,您只需要在右侧使用一

我需要将宏定义为函数。例如:

#define REGISTER 0x80000000
...
writel(addr, nic->regs + REGISTER); // arguments are address and register
我是这样定义的:

#define WRITEL(addr, nic->reg + reg) ((writel(addr, nic->regs + (reg))))
这里怎么了?
谢谢

宏参数有点像普通函数参数。在左侧,您只需要在右侧使用一个名称

 #define WRITEL(ADDR, REG) (writel(ADDR, nic->regs + (REG)))

非常感谢。从来没有做过这些事。我想我明白了原则。非常感谢您的帮助,但是是否有必要用()?@GeorgeZ来介绍函数。不是。抱歉@tilz0R是正确的。这是肌肉记忆。除了单个裸函数调用之外的任何其他表达式都需要括号。@这是一个很好的观点。保留括号是防御性的。您是否有特殊的理由将其作为一个宏来执行,而不是具有所有好处的正常功能(类型检查……等等)?