www.mikrocontroller.net

Forum: Compiler & IDEs Benutzung von define


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe eine kleine C-Frage.Kann ich überhaupt in C als Makrodefinition 
schreiben, fall es sich  um ein String handelt. Mein Compiler erkennt 
überhaupt kein Fehler.
#define ERROR "Time ist out"

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du schreiben und kann je nach Einsatzort (Quellcodezeile) auch 
funktionieren. Schön ist das Denglisch aber nicht ;-)

Autor: yxcv (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Compiler hat damit auch nichts zutun, hier arbeitet der 
Präprozessor.
Was hast du über vor? Ich behaupte mal einfach, dass wir mehr Infos von 
dir benötigen.

cu

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst in die Makrodefinition nahezu alles schreiben, was du lustig
bist. Makros bewirken einfach eine Textersetzung (grob vergleichbar
mit der Substitute- oder Replace-Funktion von Texteditoren), bevor der
Compiler über den Programmtext läuft.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yxcv wrote:
> Der Compiler hat damit auch nichts zutun, hier arbeitet der
> Präprozessor.
Der Compiler meckert aber dann, wenn das Makro an falscher Stelle falsch 
eingesetzt wird.

@Gast (welch origineller Nick...):
#define definiert lediglich eine Textersetzung. Wenn Du das wie oben 
schreibst und dann im Programm z.B.
textstring[] = ERROR;
schreibst, dann ist das syntaktisch völlig korrekt und es gibt keinen 
Grund für eine Fehlermeldung. Der Präprozessor macht da schlicht die 
Ersetzung des Makros ERROR mit dem in der Makrodefinition angegebenen 
"Wert", der Compiler bekommt dann zu lesen
textstring[] = "Time ist out";
...wobei da, wie von Stefan bereits angedeutet, zwar für den Compiler 
kein Syntaxfehler vorliegt, jedoch für die Rechtschreibprüfung...

Wenn Du hingegen im Programm z.B. schreibst
ERROR;
dann ist das syntaktisch falsch und führt dementsprechend zu einer 
Fehlermeldung.

Grundsätzlich kann man mit #define alles definieren. Fehlermeldungen 
gibt es erst dann, wenn die Textersetzung durch den Präprozessor an der 
betreffenden Stelle im Programm zu einem Fehler führt.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn Du hingegen im Programm z.B. schreibst
>
> ERROR;
>
> dann ist das syntaktisch falsch und führt dementsprechend zu einer
> Fehlermeldung.

Das ist vollkommen korrekt, wenn die Zeile innerhalb einer Funktion
steht, allerdings wenig sinnbehaftet ;-)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Zeile
"Time ist out";

ist also korrekt?!? Das wage ich zu bezweifeln... ;)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist genauso korrekt wie
  printf("hallo\n");

In beiden Fällen ist die Anweisung ein Ausdruck, dessen Ergebniswert
nicht weiterverwendet wird. Im Gegensatz zum printf-Ausdruck hat "Time
ist out" keinen Seiteneffekt, ist deswegen unnütz und wird von einem
ordentlichen Compiler wegoptimiert.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus wrote:
> die Zeile
>
"Time ist out";
>
> ist also korrekt?!? Das wage ich zu bezweifeln... ;)
Naja, es gibt ne Warnmeldung à la "statement has no effect". Ich hätte 
besser ein Beispiel gewählt, bei dem es eine echte Fehlermeldung gibt...

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"abc";
ist genauso korrekt wie
123;

... und schliesslich kann mit dem selben Recht auch
return-Wert einer Funktion unter den Teppich fallen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.