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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!