hi, beim nachfolgendem makrodefine bin ich verunsichert: #define makro() \ IEN=0; das IEN=0 gehört scheinbar zum makro auch wird "\" scheinbar als trennungszeichen für auszählungen genutzt. #define DEFINITION { \, {definition1}\, {definition2}\, {definition3}\, } kann mir da jemand auf die sprünge helfen? ich habe sowas in C noch nie gesehen. Kann auch nirgends im Netz finden. Vielen Dank
das \ lässt den nachsten zeilenvorschub (also CR/LF) ignorieren, so wird hallo \ test \ welt zu hallo test welt. das gilt nicht nur für präprozessoranweisungen. das klappt auch bei strings "langer text" \ "über zwei"\ "zeilen" bei den defines macht das besonders dann sinn, wenn der text der hinter diesen defines steckt besonders lang ist, und man nicht immmer wie wild von links nach rechts scrollen muß gruß rene
Zudem muß iirc nach dem '\' DIREKT ein \n, bzw \r\n folgen, also dürfte Dein #define DEFINITION { \, nicht funktionieren. Grüße, Freakazoid
Bei strings ergibt das allerdings keinen Sinn, denn das :
1 | char *str1 = "Hallo" |
2 | " "
|
3 | "Welt!"; |
...und das:
1 | #define SPACE " "
|
2 | char *str2 = "Hallo" SPACE "Welt!"; |
Funktioniert auch und nennt sich "string concatenation"...
Vielen Dank, in meinem Fall ist es tatsächlich exakt, wie es Rene beschrieben hat. Jetzt wird mir einiges klar. Viele Grüße
@oldbug stimmt. ist mir gerade erst aufgefallen das hinter dem \ noch ein , ist.. von daher kann es dann nicht klappen (bzw. der compiler müsste meckern). allerdings bin ich mir nicht sicher ob es nicht doch möglich ist hinter dem \ noch spaces zu haben. aber ich denke das hängt vom compiler ab (z.b. meckert der IAR wenn in der letzten zeile zeichen (spaces) außer cr/lf stehen). gruß rene
Richtig, das "," ist wohl das Problem. Leerzeichen sollten eigentlich keine Probleme machen. Um Mehrzeilige Makros ganz sicher zu machen sollte man folgende Notation verwenden: #define MAKRO do {
Sorry, da fehlt noch was: #define MAKRO() do { \ Anweisung1(); \ Anweisung2(); \ Anweisung3(); \ }while (0) Dann hat man auch kein Problem bei z.B. folgender verwendung: if (23 == abc) MAKRO(); else ...
@christian stümmt. so funktionierts ! :-) nutze die präprozessor-makros ganz intensiv für meine software sachen. damit kann man saumässig viel machen (nicht zuletzt kapuut-machen :-))) vor allem bei code-generierten tabellen (fett grinsend) kann man super damit arbeiten. ich wünschte mir jede programmiersprache hätte sowas (vor allem assembler und delphi, da tut sowas derart not .....) gruß rene
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.