Benutzung von define

Gast #951954
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
Gast #951966
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
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
> 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
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.
#952122
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.