Autor |
Beitrag |
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 03.10.08 17:44
Hallo!
Kann mir jemand sagen, warum beides gültig ist und ob es da einen Vor- bzw. Nachteil gibt?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| const clWindowColor = $00E8E8E8; sNotFound = 'Nicht gefunden: '; const clWindowColor = TColor($00E8E8E8); sNotFound = String('Nicht gefunden: '); |
Hat die Angabe des Datentyps irgendeinen Vorteil?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 03.10.08 17:47
So wie es da steht ist es ein (unnötiger) Cast in den entsprechenden Datentyp.
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 03.10.08 18:25
DeddyH hat folgendes geschrieben : | So wie es da steht ist es ein (unnötiger) Cast in den entsprechenden Datentyp. |
Ok, danke. Das wollte ich wissen!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Fr 03.10.08 19:18
Hi,
Wenn du willst, dass die Konstante nicht den Standard-Datentyp hat, musst du das übrigens so machen: Delphi-Quelltext 1: 2: 3: 4:
| const HalloWelt: String = 'HiHo'; clWindowColor: TColor = $00E8E8E8; EndOfPost: PChar = 'mfG,'; |
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 03.10.08 19:23
Auch bei PChars brauchst du Konstanten nicht casten. Entweder macht das Delphi automatisch, oder es ist einfach egal - ich weiß es nicht, aber es funktioniert.
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 03.10.08 21:00
Ich habe nur so aus Interesse getestet, was passiert, wenn man den Datentyp angibt. Und da sich nichts - weder beim Kompilieren noch im Programm - änderte, wollte ich eben wissen, ob das Sinn hat!
Danke noch mal!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 03.10.08 21:22
Hallo,
normalerweise werden Fliesskommakonstanten als extended gespeichert und das ist bei vielen Schleifendurchläufen hinderlich, falls man sonst nur double nutzt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| {$APPTYPE console} const TestCOnst = 1.0; begin writeln(TestConst,' ', sizeof(TestConst) ); end. 1.0000000000000000E+0000 10 |
Gruß Horst
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 04.10.08 00:14
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind:
Delphi-Quelltext 1:
| const ChangeMe: Integer = 42; |
je nach Compiler-Einstellung Writeable sind, man also legitim auch
Delphi-Quelltext
schreiben darf  Und dabrauch man noch nicht mal Pointer-Foo für betreiben 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Sa 04.10.08 12:42
Zuletzt bearbeitet von Yogu am Sa 04.10.08 12:51, insgesamt 1-mal bearbeitet
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 04.10.08 12:50
Yogu hat folgendes geschrieben : | Das
BenBE hat folgendes geschrieben : | Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind: [...] je nach Compiler-Einstellung Writeable sind |
Das heißt dann, dass
Delphi-Quelltext 1:
| const ChangeMe: Integer = 42; |
das gleiche ist wie
Delphi-Quelltext 1:
| var ChangeMe: Integer = 42; |
Da verstehe ich jetzt nicht wirklich den Nutzen dahinter.  |
Das ist AFAIK eine Kompatibilitätseinstellung, die per Default ausgeschaltet ist. Wenn sie eingeschaltet ist, bekommt man für Schreibzugriffe auf Konstanten IIRC jedoch eine Warnung angezeigt.
Wo so etwas wichtig sein kann, ist wenn man bestimmte Datenstrukturen hat, die zwar Konstant sind, wo man jedoch keinen geschlossenen Ausdruck zu deren Definition hinschreiben kann. Ein einfaches Beispiel für soetwas ist z.B. wenn man auf Adressen anderer Variablen zugreifen muss (Speicherstrukturen), wo etwas mehr Arithmetik notwendig ist, oder man die Adresse anderer Konstanten einbeziehen muss in Daten. Diese Konstanten kann man dann im initialization-Abschnitt einer Unit initialisieren, ohne dass man auf den Vorteil von Const (nämlich die Zwischenspeicherung und einige Compiler-Optimierungen) verzichten muss.
Hidden hat folgendes geschrieben : | höchstens, dass lokale Variablen nicht initialisierbar sind.. Dann ginge das eben doch - indem man seine Variable als Konstante deklariert  |
Dafür sollte man das nicht einsetzen, da das Nebeneffekt-Programmierung ist 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am Sa 04.10.08 12:52, insgesamt 1-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 04.10.08 12:50
höchstens, dass lokale Variablen nicht initialisierbar sind.. Dann ginge das eben doch - indem man seine Variable als Konstante deklariert
E: Bezog sich noch nicht auf BenBes Post
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
|