[C, preprocesor] Makro jako argument makra


(Wieloiksiasty) #1

Chciałbym, aby makro funkcjonowało w moim programie jako argument innego makra.

Mamy dwa makra:

#define LED1 PORTB,PB0
#define set(port, num) ((port) |= (1 << (num)))

Niestety wywołanie:

set(LED1);

powoduje błąd:

makro "set" wymaga 2 argumentów, ale podano tylko 1

Czy da się zrobić, tak, żeby preprocesor rozwijał najpierw LED1 , a potem set? Jak inaczej można to obejść?

 

Please help!


(Rolek0) #2

Spróbuj:

#define INV_M(M, A) M(A)
 
INV_M(set, LED1)

Tylko pamiętaj, że preprocesor to podstępna bestyja :wink: