AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Unterschiede zwischen Konstanten-Deklaration?
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiede zwischen Konstanten-Deklaration?

Ein Thema von H4ndy · begonnen am 17. Jun 2010 · letzter Beitrag vom 17. Jun 2010
Antwort Antwort
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#1

Unterschiede zwischen Konstanten-Deklaration?

  Alt 17. Jun 2010, 20:38
Delphi-Version: 2010
Hallo,

Ich habe eine Unit, welche viele Kontanten in dieser Form enthaelt:
Delphi-Quellcode:
const
  { Amp Drive }
  CTRL_DRIVE: Byte = $0D; // $00 to $7E

  { Amp Toogle Controls (avail. depends on model!) }
  CTRL_DRIVE_ONOFF: Byte = $1A; // $00 (off), $40 (on)
  CTRL_DIST_ONOFF: Byte = $19; // $00 (off), $40 (on)
Nun will ich in einer anderen Unit diese fuer Case-Abfragen nutzen:
Delphi-Quellcode:
  case ControlID of
    CTRL_DRIVE: DoSomething();
    CTRL_EQ_BASS: DoSomething();
    CTRL_EQ_MID: DoSomething();
    CTRL_EQ_HIGH: DoSomething();
    CTRL_CHANNEL_VOLUME: DoSomething();
  end;
ControlID ist vom Typ Byte. Allerdings meckert jetzt Delphi rum, das eine Konstante fuer die Case-Faelle benoetigt wird ("[DCC Error] fmMain.pas(134): E2026 Constant expression expected"). Definiere ich die Konstanten ohne expliziten Typ z.B. mit CTRL_DRIVE = $0D; , so geht es. Allerdings erschliest sich mir nicht der Unterschied (sind ja beides Konstanten...).

Kann ich das ": Byte" ruhigen Gewissens weglassen und Delphi macht trotzdem ein Byte draus (wegen Bit-Operatoren)?
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unterschiede zwischen Konstanten-Deklaration?

  Alt 17. Jun 2010, 20:44
Zitat:
CTRL_DRIVE: Byte = $0D;
typisierte Konstanten sind keine "echten" Konstanten,
sondern nur schreibgeschützte Variablen.

CASE verlangt aber "echte" Konstanten.


Dieses sind "echte" Konstanten:
Code:
const
  { Amp Drive }
  CTRL_DRIVE      = $0D; // $00 to $7E

  { Amp Toogle Controls (avail. depends on model!) }
  CTRL_DRIVE_ONOFF = $1A; // $00 (off), $40 (on)
  CTRL_DIST_ONOFF = $19; // $00 (off), $40 (on)
oder
Code:
const
  { Amp Drive }
  CTRL_DRIVE      = Byte($0D); // $00 to $7E

  { Amp Toogle Controls (avail. depends on model!) }
  CTRL_DRIVE_ONOFF = Byte($1A); // $00 (off), $40 (on)
  CTRL_DIST_ONOFF = Byte($19); // $00 (off), $40 (on)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Unterschiede zwischen Konstanten-Deklaration?

  Alt 17. Jun 2010, 21:01
Danke fuer die Aufklaerung

Will nur kurz nachhaken:
Delphi-Quellcode:
  SYSEX_SYSTEM_INQUIRY:
    array [0..5] of Byte = (
      $F0, $7E, $00, $06, $01, $F7
    );
ist dann bestimmt auch nur eine "Fake-Konstante", oder?
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unterschiede zwischen Konstanten-Deklaration?

  Alt 17. Jun 2010, 21:16
jupp


Delphi-Quellcode:
const Test: array [0..3] of Byte = (11, 22, 33, 44);

type PHack = ^THack;
  THack = array [0..3] of Byte;

procedure TForm5.FormCreate(Sender: TObject);
begin
  ShowMessage(IntToStr(Test[1]));
  PHack(@Test)^[1] := 111;
  ShowMessage(IntToStr(Test[1]));
end;
Darum sind/können Pointer-Spielereien auch mal gefährlich werden ... vorallem wenn man ausversehn irgendwelche Schutzmaßnahmen umgeht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 20:28 Uhr.
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