AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konstante in Konstante

Ein Thema von lxo · begonnen am 24. Nov 2022 · letzter Beitrag vom 26. Nov 2022
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.666 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Konstante in Konstante

  Alt 25. Nov 2022, 09:03
Und nicht vergessen: Es gibt einen Compiler-Switch, der es erlaubt, typisierte Konstanten zu verändern:

J+
bzw.
{$WRITEABLECONST ON}

Das würde bei case-Statements zu Chaos führen und deshalb sind sie nicht erlaubt.

Delphi-Quellcode:
Case x of
  a: ;
  b: ;
end;
ist intern etwas anderes als
Delphi-Quellcode:
if x = a then begin
end else if x = b then begin
end;
Thomas Mueller
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Konstante in Konstante

  Alt 25. Nov 2022, 09:30
Ich habe nichts produktives beizutragen, möchte aber meinen Unmut ebenso wie Günther darüber ausdrücken.
Erst Anfang der Woche wieder darüber gestolpert, als ich mehrere typisierte Konstanten mit gleichen Inhalt zusammenfassen wollte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#3

AW: Konstante in Konstante

  Alt 25. Nov 2022, 10:19
Zu unerwarteten Fehlern beim CASE würde es nur führen, wenn man doppelte Werte durch die Änderungen bekommt UND der Compiler die Reihenfolge der Auswertung geändert (optimiert) hat.

Normal macht Case intern kein
Delphi-Quellcode:
if i = 0 then ...
else if i = 1 then ...
else if i = 3 then ...
else if i = 4 then ...
else if i = -5 then ...
else ...
sondern eher sowas
Delphi-Quellcode:
//Inc(i, 132) or Dec(i, 123) wenn erster Wert keine 0 ist
if i = 0 then ... // am Ende jeweils ein "goto CaseEnd;"
Dec(i);
if i = 0 then ...
Dec(i, 2);
if i = 0 then ...
Dec(i);
if i = 0 then ...
Inc(i, 9);
if i = 0 then ...
{else} ...
CaseEnd:
Ja, und sowas klappt nur, wenn die Konstanten "unveränderbar" sind, damit der Compiler quasi mit ihnen "rechnen" kann.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Nov 2022 um 10:33 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Konstante in Konstante

  Alt 26. Nov 2022, 17:25
Ja schon. Aber auch wenn ich es für nich tgut finde halte ich den Wunsch für implementierbar. Es ist doch völlig egal wie der Compiler das intern macht. Dann muss er halt das bei fixen Konstanten das so machen und bei variablen "Konstanten" und Strings halt anders.
Und aus sicherer Quelle (CPU-Fenster, 32-Bit) kann ich schreiben, das der Compiler das auch anders macht als mit viele ifs, nämlich dass er eine Sprungtabelle erzeugt und dann über den Index verzweigt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz