2014-01-23 4 views
0

Привет У меня возникли проблемы с помощью C макросы и было интересно, если кто-нибудь может помочь:Макрос используется для замены аргументов внутри другого макроса в 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 : ')' 

Любая помощь будет ар preciated.

ответ

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

SET_BIT(A7,7); 
+0

Я не уверен, что действительно инкапсулирует понятие 7 в 'A7' ... –

+0

@OliCharlesworth Я понимаю это, но оригинальный плакат сказал: установить 7-й бит ** A7 **. Поэтому наилучшим способом должно быть следующее: '#define A PORTA, а затем SET_BIT (A, 7);' –

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); 

Как сказал Вальтер, не забудьте скобки вокруг всех параметров, используемых в макросе.

Смежные вопросы