Entwickler-Ecke

Sonstiges (Delphi) - Wertebereich im Prozedurparameter


Maweki - So 10.10.04 16:05
Titel: Wertebereich im Prozedurparameter
Hallo.

mein Problem. Ich will einer Prozedur eine Zahl übergeben (hier Byte). Aber diese Zahl soll nur die Zahlen 0, 1 oder 2 fassen können.

das war mein erster Versuch

Delphi-Quelltext
1:
procedure SetDebugMode(Mode[0..2]: Byte);                    

und

Delphi-Quelltext
1:
procedure SetDebugMode(Mode[0..2]);                    


auf http://www.delphi-source.de steht:

Zitat:
Einen weiteren Datentyp, der eigentlich gar kein eigener Datentyp ist, gibt es noch, nämlich den Teilbereichstyp, auch Unterbereichstyp genannt. Hierüber kann man Variablen z. B. zwar den Typ Integer zuordnen, aber nicht den kompletten Definitionsbereich, sondern nur einen Teilbereich davon:

Delphi-Quelltext
1:
var kleineZahl: 0..200;                    


ich habs auch schon mit procedure SetDebugMode(Mode: 0..2); versucht

aber die Fehler, die kommen:
die oberen Versuche:
"Missing ParameterType" und der Cursor bleibt bei [|0 stehen
und das untere:
"Identifier expected but Number found -> 0|..


wo is da denn der Fehler, bzw. wie geht das?

Kann mir da einer helfen?

MfG Maweki


.Chef - So 10.10.04 16:44

Ich muss zugeben, dass ich nicht die genauen syntaktischen Möglichkeiten kenne, die es da gibt. Aber was spricht dagegen, den Wert als Byte zu übergeben und einfach in der Funktion die Gültigkeit (0 bis 2) zu überprüfen?

Gruß,
Jörg


Maweki - So 10.10.04 16:49

das habe ich mir auch schon überlegt. das ganze soll eine Debugunit wertden.

Das heisst, es gibt drei debugmodi und halt eine einfache Konsolenunterstützung und so...

also irgendwie stelle ich mir die Prüfung schwierig vor, weil man ja die Daten nich wirklich zurückgeben kann und das Handling und so. Naja...
Ich könnte natürlich auch die Modi auf 255 begrenzen.

Das wäre natürlich auch gut. Danke ;)

Prolem erledigt...


BenBE - So 10.10.04 16:53

Wenn du einen Procedur-Paramter im Wertebereich einschränken willst, musst du erst einen Typ


Delphi-Quelltext
1:
2:
type
  TEingeschraenkterParameter = 0..2;


deklarieren und diesen Typ als Paramter-Typ angeben.

Hinweis: Ohne Bound-Chckes bringt dir das aber trotzdem im Extremfall nix.


AXMD - So 10.10.04 16:56

Hi,

ich würds mal so probieren:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type
  TDebugMode = 0..2;

...

procedure SetDebugMode(DebugMode: TDebugMode);
...


AXMD

//EDIT: Sorry, BenBE - da war ich wohl etwas langsam :)


Maweki - So 10.10.04 16:57

neue Typen zu erstellen war das einzigste, was ich um jeden Preis vermeiden wollte.

Ich machs jetzt nur mit Byte...

da sollte doch der Compiler schon aufpassen, oder?


BenBE - So 10.10.04 20:04

Wenn du Byte nutzt, musst du auf die Ranges selber aufpassen.

Genau das gleiche gilt aber auch, wenn du den Typ verwendet hättest.
Man kann Delphi ohne weiteres austricksen, so dass man auch ungültige Werte dem Parameter hätte zuweisen können. Selbst mit aktivierten Rangechecks. Genau das gleiche gilt bei Deaktivierung dieser, nur, dass es dadurch sogar noch vereinfacht wird.

Sowieso sollte man alle Eingaben einer Procedure auf Sinnhaftigkeit prüfen.