Not logged in. · Lost password · Register

il66ifix
Member since May 2011
110 posts
Subject: #define und Text
Hi

Passt zwar nicht ganz zur Lehrveranstaltung GSPIC, drum kommts hier rein.
Ich hab hier ein Display, das kann mit printf() was anzeigen. Ich würde mir gerne den aktuell verwendeten Port anzeigen lassen, an dem eine LED geschaltet wird.
Nur jetzt ist das Problem:

#define MYPORT PORTG
...main...
printf("MYPORT: %d\n", zahl);

liefert nicht wie gewünscht "PORTA: zahlenwert" in der Ausgabe, sondern "MYPORT: zahlenwert". Macht hier das #define einen Fehler? Kann mir irgendjemand erklären, wie ich die gewünschte Ausgabe erhalte?
FanFan
FSI EEI & FSI Mechatronik
(Moderator)
Member since Oct 2010
76 posts
Quote by il66ifix:
printf("MYPORT: %d\n", zahl);

Du sagst ja auch, dass er explizit "MYPORT" ausgeben soll.
Probiere es mal mit:
printf("%s: %d\n", MYPORT, zahl);

Das %s ist dabei der Platzhalter für die string-Variable MYPORT.
il66ifix
Member since May 2011
110 posts
Klappt net, da spuckt er diese Warning aus:
format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat=]
Hab aber jetzt doch was gefunden zu dem Thema bei mikrocontroller.net (Klassischerweise unter dem Titel "Frage zu #define"):
und alles was in " oder ' eingeschlossen
ist, lässt der Präprozessor ebenfalls in Ruhe.
Wird also wohl nix, aber danke für den Tipp.
FanFan
FSI EEI & FSI Mechatronik
(Moderator)
Member since Oct 2010
76 posts
Stimmt, da war was. Man muss einen pointer benutzen, der auf die Adresse zeigt, an der der string liegt.
KapHa
Member since Oct 2011
13 posts
Also meiner Meinung nach sollte es schon helfen, wenn du MYPORT mit einem String ersetzt; also
#define MYPORT_STR     "PORTG"
// ...
printf("%s: %d\n", MYPORT_STR, zahl);
// oder:
printf(MY_PORT_STR ": %d\n", zahl);
wobei bei der letzten Variante der String zur compile-Zeit zusammengebaut wird und du dir dadurch eine mov Instruktion und Arbeit im printf sparst ;)
Durch die Ersetzung mit dem String lässt sich MYPORT_STR natürlich nicht mehr für irgendwelche Zuweisung (also tatsächliches LED an- und ausschalten) verwenden...
Max.
LRT, FabLab, ehem. FSI EEI
(Administrator)
Member since Feb 2011
240 posts
Und für alle die, die noch wirrere Dinge anstellen wollen, gibt es noch "token pasting": meine ## variable wird zu meinevariable zusammengeklebt. Aber wer das ohne sehr guten Grund einsetzt, gehört erschossen.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen