konstanter Wert - Wer rechnet hier ?

Das kann dir am besten dein Kompiler sagen, einfach den erzeugten 
ASM-Code anschauen.

Und ja, die üblichen Kompiler machen das, zumindest wenn die Optimierung 
eingeschaltet ist.

Der Präprozessor rechnet an der Stelle aber nie.
Gast
> 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
>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? Na ja, 
wahrscheinlich nicht.
Gast
>> 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

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.