Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Konstanten] Welcher Datentyp? (https://www.delphipraxis.net/110599-%5Bkonstanten%5D-welcher-datentyp.html)

xZise 20. Mär 2008 15:57


[Konstanten] Welcher Datentyp?
 
Hi DP,
ich habe folgende Konstanten:
Delphi-Quellcode:
const
  DOT_RADIUS = 6;
  RING_RADIUS = 32 - DOT_RADIUS;
  DOT_DIAMETER = 2 * DOT_RADIUS;
Mich würde nun interessieren, welche Datentypen Delphi den Konstanten zuweist.
Sind das alles Bytes? Oder Integer? Oder ist das letzte sogar ein Extended?

MfG
xZise

Apollonius 20. Mär 2008 16:04

Re: [Konstanten] Welcher Datentyp?
 
Diese Konstanten haben keinen Typ. Sie werden nicht in der Exe gespeichert, sondern am Ort der Verwendung eingefügt, der Datentyp wird dabei automatisch ergänzt. Was mich zur Frage bringt: Wozu willst du das wissen?

Hansa 20. Mär 2008 16:15

Re: [Konstanten] Welcher Datentyp?
 
Zitat:

Zitat von Apollonius
Sie werden nicht in der Exe gespeichert, sondern am Ort der Verwendung eingefügt..

Und wo soll das sein, wenn nicht in der EXE ? :shock:

mkinzler 20. Mär 2008 16:16

Re: [Konstanten] Welcher Datentyp?
 
Sie existieren nicht als variablen sondern werden beim Kompilieren direkt im Quellcode durch ihren Wert ersetzt.

Apollonius 20. Mär 2008 16:19

Re: [Konstanten] Welcher Datentyp?
 
:roll: Ich meine, dass Var := Var + DOT_RADIUS genauso kompiliert wird wie Var := Var + 6 und nicht etwa so, als ob DOT_RADIUS eine Variable wäre. Anders sieht es natürlich aus, wenn der Typ angegeben wird.

bluesbear 20. Mär 2008 16:26

Re: [Konstanten] Welcher Datentyp?
 
Zitat:

Zitat von Apollonius
:roll: Ich meine, dass Var := Var + DOT_RADIUS genauso kompiliert wird wie Var := Var + 6

Genauso ist es. Delphi ist da eher pragmatisch, und nicht die reine Lehre, wie oft. Das hat mich anfangs auch etwas irritiert.

Apollonius 20. Mär 2008 16:29

Re: [Konstanten] Welcher Datentyp?
 
Ich würde nicht sagen, dass es nicht "die reine Lehre" ist. Schließlich gibt es die Möglichkeit, Konstanten in einer eigenen Exe-Section der Exe-Section, in der sich auch initialisierte Variablen befinden, anzulegen, indem man den Typen angibt, dann kann man davon auch die Adresse nehmen. Das ist wie in C++: Da gibt es zum einen untypisierte #define-Konstanten und zum anderen typisierte Konstanten, die man fast so wie Variablen behandeln kann.

xZise 20. Mär 2008 16:44

Re: [Konstanten] Welcher Datentyp?
 
Zitat:

Zitat von Apollonius
Was mich zur Frage bringt: Wozu willst du das wissen?

Naja ;) Weil der Radius und damit auch der Durchmesser immer gerade sein werden (ich kann schlecht ein Kreis mit einem Radius von 2,5 px zeichnen xD) ist, besonders ein Extended, unnötige Verschwendung ;)
Und zum anderen auch möchte ich wissen wie Delphi im dem zusammenhang tickt.

Zitat:

Zitat von Apollonius
:roll: Ich meine, dass Var := Var + DOT_RADIUS genauso kompiliert wird wie Var := Var + 6 und nicht etwa so, als ob DOT_RADIUS eine Variable wäre. Anders sieht es natürlich aus, wenn der Typ angegeben wird.

Also sind die nicht gleich? Jedenfalls für Delphi/Kompiler?
Delphi-Quellcode:
const
  DOT_RADIUS = 6;
  DOT_RADIUS2 : Byte = 6;
MfG
xZise

Apollonius 20. Mär 2008 16:49

Re: [Konstanten] Welcher Datentyp?
 
Das siehst du ziemlich leicht: Lass dir mal die Adressen der Konstanten ausgeben. Wenn du Assembler kannst, solltest du dir auch mal den generierten Code für eine einfache Operation anschauen.

xZise 20. Mär 2008 17:08

Re: [Konstanten] Welcher Datentyp?
 
Okay.
Oberes geht nicht, da eine Variable erforderlich ist.
Und somit kann die Konstante variabel sein:
Delphi-Quellcode:
p := @DOT_RADIUS2;
p^:= 120;
Und schon ist DOT_RADIUS2 nicht mehr 6 :shock:

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz