Benutzung von define

Gast #951966
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.
#951969
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.
1
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
1
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
1
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.
Gast #952013
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 ;-)
Gast #952121
Lesenswert?
• ▲
▼
Das ist genauso korrekt wie
1
  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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.