Можно ли передать один аргумент в макрос и получить два? - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь написать некоторые функции как макросы, но я просто не могу понять, как это сделать.

#define PA0 (PORTA, PIN0_bm);
#define PA1 (PORTA, PIN1_bm);
...
#define PA7 (PORTA, PIN7_bm);

#define PD0 (PORTD, PIN0_bm);
#define PD1 (PORTD, PIN1_bm);
...
#define PD7 (PORTD, PIN7_bm);

затем макрос для функции

#define pinMode(x)  (x[0].DIRSET = x[1])

как я хотел выглядеть после препроцессора

pinMode(PA0) -> (PORTA.DIRSET = PIN0_bm)

После компиляции (AVR-gcc) я получаю ошибку invalid types 'int[int]' for array subscript.

Можно ли передать один аргумент макросу и получить два?

1 Ответ

0 голосов
/ 22 октября 2018

Макросы C ++ заканчиваются на следующей новой строке, поэтому точки с запятой также расширяются.Как первоначально предложено Mooing Duck :

@ JakobJug: Почему бы не использовать макросы наоборот?#define pinmode(L,R) (L[0].DIRSET=R[1]), а затем #define PA0 pinmode(PORTA,PIN0_bm)?

За исключением случаев, когда требуется небольшая коррекция, давая #define pinmode(L,R) (L.DIRSET=R).Затем PA0 расширяется до pinmode(PORTA,PIN0_bm), а затем (PORTA.DIRSET=PIN0_bm).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...