Forum: Compiler & IDEs sbit.h, doppelt definiert


von Chris (Gast)


Lesenswert?

Ich habe hier in Forum die sbit.h entdeckt und noch eine Frage dazu:
Aus welchem Grund wird zuerst SBIT_ definiert und danach steht
#define SBIT(x,y)       SBIT_(x,y)
Wieso kann man nicht gleich SBIT definieren? Kann das irgendwelche 
Nebenwirkungen haben?

http://www.mikrocontroller.net/attachment/highlight/254049

von Chris (Gast)


Lesenswert?

Noch was: Wie nennt man des ## im define? Wonach muss ich googlen um 
eine Erklärung zu finden was genau ich damit machen kann?

von Karl H. (kbuchegg)


Lesenswert?

Das ist der 'Token pasting' operator.

Und dessen Verhalten ist der Grund für die 'Ehrenrunde' über ein 
Zwischenmakro.
Du willst nämlich haben, dass Argumente die an ein Makro übergeben 
werden, die selbst wieder Makros sind, ausgewertet werden.

von Chris (Gast)


Lesenswert?

Danke für die Antwort, jetzt bleibt nur noch die Frage offen, welchen 
Vorteil es bringt das define noch mal zu definieren, bringt es überhaupt 
einen?

von nga (Gast)


Lesenswert?

Chris schrieb:
> jetzt bleibt nur noch die Frage offen, welchen Vorteil es bringt das
> define noch mal zu definieren, bringt es überhaupt einen?

Ja, natürlich.
Schau dir doch einfach mal an, was passiert, wenn du nur ein Makro 
verwendest: es wird nicht der "Inhalt" des Arguments übergeben, sondern 
der Name/Text des Arguments. Nur mit dem 2stufigen System geht das was 
du erreichen willst. (Sorry für diese schwammige Erklärung, ich hoffe 
man kann es verstehen ;) )

Bei Unklarheiten kannst du dir auch den Präprozessoroutput anschauen, 
hilft bei so was oft

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.