Präprozessor Makro ineinande Verschachteln?

OP #4487987
Lesenswert?

Hallo!

Habe aus Übersichtlichkeit, möglichst viele Parameter als Präproz.Makros 
defeniert. Seitdem bekomme ich vom Compiler dauernd Warn- und 
Fehlermeldungen.

Kann man Präpr.Makros nicht miteiander verschachteln?

So werden;
  SPG_EING_PORT
  SCHWELLE_OBER_SPG
  SCHWELLE_UNTER_SPG
  AUSGANG_SET_HIGH
  AUSGANG_SET_LOW
ausser von weiteren Pp-Makros, nicht mehr verwendet/aufgerufen.
Angehängte Dateien:
OP #4488010
Lesenswert?

Oh, habe den Fehler gefunden!

  #define AUSGANG_SET_HIGH (port,mask) ((port) |= (1<<mask))
  #define AUSGANG_SET_LOW (port,mask) ((port) &= ~(1<<mask))
Leerzeichen zw.      ...HIGH (port...
und Leerzeichen zw.  ...LOW (port...

  #define AUSGANG_SET_HIGH(port,mask) ((port) |= (1<<mask))
  #define AUSGANG_SET_LOW(port,mask) ((port) &= ~(1<<mask))
Problemlos!
#4488014
Lesenswert?

__Son´s B. schrieb:
> Kann man Präpr.Makros nicht miteiander verschachteln

__Son´s B. schrieb:
> Kann man Präpr.Makros nicht miteiander verschachteln?

Kann man. Aber das Hintereinanderhängen von C-Befehlen in einem Makro 
ist etwas kniffliger.

Und: Extrem fehlerträchtig.

Mein Tipp: Nimm stattdessen static-inline-Funktionen.

Viele Grüße
W.T.

Und weil die Frage dann eh kommt: Es geht mit einer do-while-Schleife, 
die nur ein einziges Mal ausgegführt wird. Aber ich rate davon ab.
OP #4488879
Lesenswert?

Walter T. schrieb:
> Und weil die Frage dann eh kommt: Es geht mit einer do-while-Schleife,
> die nur ein einziges Mal ausgegführt wird. Aber ich rate davon ab.

Bezieht sich das auf dei "static-inline-Funktionen"?

Eigentlich würde ich gerne einen isolierten Bereich schaffen, in dem ich 
alle Grundparameter (Ports, Spannungsschwellen, Zeiten etc) einmalig 
vorgebe.
PräProz Makros wird nicht der richtige Weg sein!?!?!
Ev. "struct"? Konnte mich aber leider noch nicht damit beschäftigen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren