Ohne Garantie:
Wenn ich mich richtig erinnere sollte es über eine "Zwischenrunde"
möglich sein.
Der Präprozessor "sieht" zuerst das Makro pin_set(xxx) und versucht, es
zu ersetzen. Er findet aber nur die Variante mit vier Parametern, eine
mit einem Parameter gibt es nicht.
Dass ENC_A auf vier Parameter aufgeteilt wird würde erst im nächsten
Erstzungs-Schritt folgen.
1 | #define ENC_A (PB0, PORTB, PINB, DDRB)
|
2 | #define pin_set_tmp(p, o, i, d) (o |= (1 << p))
|
3 | #define pin_set(A) pin_set_tmp(A)
|
4 |
|
5 | pin_set(ENC_A);
|
Ich habe gerade keine Umgebung offen, in der ich es testen könnte, aber
einen Versuch ist es wert. ;-)