Forum: Compiler & IDEs Macroexpansion in C


von AN D. (schoensittich)


Lesenswert?

Hallo Zusammen

Ich brauche mal eure Hilfe und verzweifle gerade. Ich habe folgendes 
Konstrukt:

#define PORT PORTE
#define ISR(x) x ## _INT0_vect
#define ISR_VECTOR ISR(PORT)

Ich erwarte nach dem Präprozessordurchlauf für ISR_VECTOR: 
PORTE_INT0_vect

Ich bekomme: PORT_INT0_vect

Habt Ihr eine Lösung oder könnt mir erklären, waum er ISR(x) auflöst 
aber Port nicht?

Ich würde gerne das #define PORT in die Headerdatei verschieben. So dass 
nur an dieser Stelle geändert werden muss.

Vielen Dank vorab!

von Daniel A. (daniel-a)


Lesenswert?

Das hängt mit der Reihenvolge bei der Makrosubstitution zusammen. So 
müsste es gehen:
1
#define PORT PORTE
2
#define ISR(x) x ## _INT0_vect
3
#define ISR_VECTOR_EVAL(x) ISR(x)
4
#define ISR_VECTOR ISR_VECTOR_EVAL(PORT)

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.