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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren