Forum: Compiler & IDEs wie #define mit Verkettung?


von Walter (Gast)


Lesenswert?

Ich habe den folgenden Code geschrieben:

#define maxPORT C
#define maxBIT PC3

#define CLR(typ, port, bit) typ##port &= (1<<bit)
(...)
CLR(DDR, maxPORT, maxBIT);

was da im Endeffekt raus kommen soll wäre:
DDRC &= (1<<PC3);

es kommt aber die Fehlermeldung
"DDRmaxPORT nicht deklariert"

Wie schaffe ich es dass der Präprozessor maxPort durch C ersetzt?
ich möchte mir halt die Definitionen für maxDDR, maxPIN, maxPORT 
ersparen,
so hätte ich nur eine Definition welcher Port (A,B, oder C),
das macht Änderungen leichter und man muss nicht 100 Namen erfinden

von Walter (Gast)


Lesenswert?

so gehts:

#define maxPORT C
#define maxBIT PC3

#define CLR_(typ, port, bit) typ##port &= (1<<bit)
#define CLR(typ, port, bit) CLR_(typ, port, bit)

CLR(DDR, maxPORT, maxBIT);

von Walter (Gast)


Lesenswert?

noch etwas geschickter wie ich finde, da die Definition jetzt an nur 
einer Stelle ist:

#define BUSDE C,PC3

#define CLRB_(typ, port, bit) typ##port &= (1<<bit)
#define CLRB(typ, port) CLRB_(typ, port)


CLRB(PORT, BUSDE);
CLRB(DDR, BUSDE);
...

von Walter (Gast)


Lesenswert?

uups, natürlich meinte ich
#define CLRB_(typ, port, bit) typ##port &= ~(1<<bit)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.