宏用于替换C中另一个宏内的参数

时间:2014-01-23 19:11:11

标签: c macros microcontroller avr

您好我使用C宏时遇到问题,并且想知道是否有人可以提供帮助:

#define A7 PORTA,7
#define SET_BIT(x,y) x=x|(1<<y)

我正在尝试设置宏,这样在主代码中,我只需输入

即可
SET_BIT(A7); to set the 7th bit of A7

但是,我收到以下错误:

warning C4003: not enough actual parameters for macro 'SET_BIT'
error C2106: '=' : left operand must be l-value
error C2059: syntax error : ')'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

您也可以通过使用中间宏来执行您想要的方式,该宏将参数扩展为由昏迷分隔的两个参数。

#define A7 PORTA,7
#define SET_BIT_INNER(x,y) x=(x)|(1<<(y))
#define SET_BIT(x) SET_BIT_INNER(x)

SET_BIT(A7);

正如valter所说,不要忘记宏中使用的每个参数的括号。

答案 1 :(得分:-1)

#define A7 PORTA
#define SET_BIT(x,y) (x)=(x)|(1<<(y))  

SET_BIT(A7,7);