Я пытаюсь упростить запись моих встроенных программ в C. Как создать макрос, который мог бы принимать любое число или параметры из 2?Несколько параметров в макросе
настоящее время у меня это:
#define P_PIN_HIGH(pin_letter, pin_num) (PORT##pin_letter |= (1 << pin_num))
#define PIN_HIGH(...) P_PIN_HIGH(__VA_ARGS__)
И я могу использовать это как так:
#define PIN_TEST A, 0 // Every pin gets defined this way.
PIN_HIGH(PIN_TEST); // Set this pin to high.
Но, я хотел бы быть в состоянии передать любое количество контактов (они должны иметь то же самое письмо) к макросу, например, так:
#define PIN_TEST A, 0
#define PIN_TEST1 A, 1
#define PIN_TEST2 A, 2
PIN_HIGH(PIN_TEST, PIN_TEST1, PIN_TEST2);
таким образом, скомпилированный код, будет выглядеть следующим образом:
PORTA |= ((1<<0) | (1<<1) | (1<<2));
Является ли это выполнимым?
ли вы имеете в виду "число PARAMATERS"> = 2? В этом случае это возможно. Синтаксис: '#define MACRO (A, B, ...)', а затем внутри макроса снова получается часть, соответствующая '...', с '__VA_ARGS__'. – pablo1977
Возможный дубликат [Переменные аргументы в макросе с использованием многоточия] (http://stackoverflow.com/questions/11514201/variable-arguements-in-macro-using-ellipsis) –
Нет, не дубликат. Большим> = 2, я просто имел в виду, что по крайней мере один вывод должен быть передан макросу. – user1806687