Virlantis napisał(a):
a dlaczego w
PORT( LED_RWPORT ) ( PORT ## LED_RWPORT )
tak się nie dzieje.
No to jeszcze raz - zobacz sam

.... w takiej wersji co sklejasz ?
napis
PORT sklei ci się ze stałą dosłowną
LED_RWPORT, czyli otrzymasz
PORTLED_RWPORT## to sklejanie nazw po lewej i po prawej dla #define
to nie ważne, że wcześniej zrobiłeś sobie np
#define LED_RWPORT D
preprocesor sklei tylko nazwę
LED_RWPORTżeby było inaczej trzeba w jakiś sposób przekazać tę nazwę za pomocą ARGUMENTU i po to druga tajemnicza linijka, czyli
#define PORT(x) SPORT(x)
która nic nie robi poza tym, że bierze sobie jako x nazwę LED_RWPORT ale wywołując kolejne makro
#define SPORT(x) (PORT##x)
preprocesor widzi, że może rozwinąć tę nazwę LED_RWPORT do postaci D bo teraz ma szansę zauważyć , że to jest makro i pod nazwą LED_RWPORT kryje się D
wtedy przekazuje już za pomocą SPORT( D ) do PORT##D
można to rozpisać tak:
PORT(LED_RWPORT) SPORT(LED_RWPORT)
SPORT(D) (PORT##D)
czyli dostaniemy:
PORTDa wracając jeszcze raz do twojego przypadku gdyby rozpisać co robi preprocesor
#define LED_RWPORT D
#define PORT( x ) ( PORT ## x )
już chyba sam się domyślasz - na początek weźmie też nazwę LED_RWPORT ale nie ma kiedy jej rozwinąć (wykonać makra) i dlatego odbędzie się to tak
PORT( LED_RWPORT ) ( PORT ## LED_RWPORT )
co da w wyniku
PORTLED_RWPORT
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]