Hallo Allerseits,
ich habe ein Makro in der Form
1 | #define SET_PIN(port, pin) (port) |= (1 << (pin));
|
definiert.
Verwende ich das Makro folgendermaßen
1 | /* ... some code ... */
|
2 | SET_PIN(PORTA, PA0)
|
3 | /* ... some code ... */
|
funktioniert es auch wie gewollt. Der Einfachheit halber möchte ich die
Parameter nun ebenfalls als Makro übergeben:
1 | #define SET_PIN(port, pin) (port) |= (1 << (pin));
|
2 | #define PIN_LED (PORTA, PA0)
|
3 | /* ... some code ... */
|
4 | SET_PIN(PIN_LED)
|
5 | /* ... some code ... */
|
dieses schlägt jedoch fehl, da an das Makro nur ein (anstatt zwei)
Parameter übergeben wird. Anscheinend wird SET_PIN vor PIN_LED
substituiert.
Lässt sich das Verhalten irgendwie so ändern, dass das Makro innerhalb
der Klammern vor dem äusseren makro aufgelöst wird?
Am Rande: ich möchte dieses Funktionalität bewusst mit Makros (und nicht
Funktionen) implementieren. Ein "Inlinen" der Funktion hat nicht immer
zum gewünschten Resultat geführt, manchmal scheint der Compiler trotzdem
einen Funktionsaufruf einzufügen.