konstanter Wert - Wer rechnet hier ?

Gast #1021056
Lesenswert?

> wird die Zahl von 5 vom Präprozessor ausgerechnet ?

Es wird zur Compilezeit ausgerechnet, aber nicht vom Präprozessor,
sondern vom Compiler. Und das ist immer so, unabhängig vom verwendeten
Compiler und der eingestellten Optimierungsstufe.
Gast #1021148
Lesenswert?

>> Und das ist immer so,
>
> Eine etwas gewagte Aussage -- könnte es irgendwo auf der Welt nicht
> doch einen extrem schlecht programmierten C-Compiler geben?

Stimmt, die war zu gewagt, wie ich gerade festgestellt habe. Ich wollte
erst antworten, dass der Standard die Auswertung konstanter Ausdrücke
vorschreibt, und dass jeder Compiler, der dies nicht tut, deswegen kein
C-Compiler ist.

Das stimmt so aber nicht: Laut Standard müssen zwar bestimmte Ausdrücke
(bspw. die Größenangabe in statischen Array-Definitionen) konstant sein,
damit der Compiler durch sofortige Auswertung dieser Ausdrücke Dinge zur
Compile-Zeit organisieren kann, die zur Laufzeit nur mit viel Aufwand zu
realisieren wären. Das bedeutet aber natürlich nicht, dass konstante
Ausdrücke in anderen Kontexten, bspw. in Zuweisungen, ebenfalls zur
Compile-Zeit berechnet werden müssen.

Da der Compiler aber für die im Standard aufgeführten Fälle konstante
Ausdrücke sowieso erkennen und berechnen können muss, kostet es den
Compiler-Entwickler praktisch keinen zusätzlichen Aufwand (eher im
Gegenteil), dieses Feature auf Ausdrücke in allen Kontexten
anzuwenden.

Insofern würde ich davon ausgehen, dass auch ohne entsprechende
Vorschrift jeder C-Compiler die 1234/232 im obigen Beispiel schon beim
Kompilieren berechnet, und meine Aussage war vielleicht doch nicht ganz 
so gewagt ;-)

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