Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
const
  clWindowColor = $00E8E8E8;
  sNotFound     = 'Nicht gefunden: ';
//oder:
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



BeitragVerfasst: Fr 03.10.08 17:47 
So wie es da steht ist es ein (unnötiger) Cast in den entsprechenden Datentyp.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 03.10.08 18:25 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Fr 03.10.08 19:18 
Hi,

Wenn du willst, dass die Konstante nicht den Standard-Datentyp hat, musst du das übrigens so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
const
  HalloWelt: String = 'HiHo';  //unnötig
  clWindowColor: TColor = $00E8E8E8;  //ändert afaik etwas, hat aber keine Auswirkungen und kann genauso benutzt werden
  EndOfPost: PChar = 'mfG,';  //ungetestet, könnte so von einer Methode benötigt werden und man müsste erst casten


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 04.10.08 00:14 
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind:

ausblenden Delphi-Quelltext
1:
const ChangeMe: Integer = 42;					

je nach Compiler-Einstellung Writeable sind, man also legitim auch
ausblenden Delphi-Quelltext
1:
ChangeMe := 23;					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 04.10.08 12:42 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind: [...] je nach Compiler-Einstellung Writeable sind

Das heißt dann, dass

ausblenden Delphi-Quelltext
1:
const ChangeMe: Integer = 42;					

das gleiche ist wie

ausblenden Delphi-Quelltext
1:
var ChangeMe: Integer = 42;					

Da verstehe ich jetzt nicht wirklich den Nutzen dahinter. :gruebel:


Zuletzt bearbeitet von Yogu am Sa 04.10.08 12:51, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 04.10.08 12:50 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Das

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Man sollte zudem beachten, dass Konstanten, die wie folgt deklariert sind: [...] je nach Compiler-Einstellung Writeable sind

Das heißt dann, dass

ausblenden Delphi-Quelltext
1:
const ChangeMe: Integer = 42;					

das gleiche ist wie

ausblenden Delphi-Quelltext
1:
var ChangeMe: Integer = 42;					

Da verstehe ich jetzt nicht wirklich den Nutzen dahinter. :gruebel:

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.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
höchstens, dass lokale Variablen nicht initialisierbar sind.. Dann ginge das eben doch - indem man seine Variable als Konstante deklariert :nut:

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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 :nut:

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)