Forum: Compiler & IDEs Benutzung von define


von Gast (Gast)


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"

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von yxcv (Gast)


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

von yalu (Gast)


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.

von Johannes M. (johnny-m)


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.

von yalu (Gast)


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 ;-)

von Klaus (Gast)


Lesenswert?

die Zeile
1
"Time ist out";

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

von yalu (Gast)


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.

von Johannes M. (johnny-m)


Lesenswert?

Klaus wrote:
> die Zeile
>
1
"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...

von daniel (Gast)


Lesenswert?

1
"abc";
ist genauso korrekt wie
1
123;

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

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
Noch kein Account? Hier anmelden.