Hallo
Ich habe in einer Prozedure etwa 20 Variablen, gibt es eine Möglichkeit sie ALLE mit einem Befehl auf 0 zu setzen oder muss ich jede Variable einzeln auf 0 setzen?
Die Welt besteht aus Zahlen, also ist alles möglich.
Du könntest ein Statischen Array verwenden. Sonst musst du es manuell machen.
Z.B. wenn alle Variablen vom Gleichen Typ sind, bietet sich ein Array an. Wenn die vom Unterschiedlichen Typ sind, könntest du ein array of const verwenden. Ist aber im allgemeinen langsamer.
Vielleicht kannst du auch Variablen einsparen. In der Regel ist das möglich.
pluto hat geschrieben:Wenn das Eigenschaften einer Klasse, wären, könntest du mit Hilfe der RTTI Alle Eigenschaften auf 0 setzten *G*.
Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.
Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.
Mag sein. Aber drauf verlassen kann man sich nicht. Z.B.müssen Boolean Variablen immer auf False oder True gesetzt werden. Weil sonst nicht der Wert drin ist, der erwartet werden könnte. Bei anderen Datentypen ist das ebenfalls so.
Klassenvariablen kenne ich im Moment nicht so. Meinst du damit Felder wie class test? oder meinst du einfach nur Variablen die in Klassen deklariert werden? oder meinst du damit Eigenschaften?
Am Sichersten ist es immer noch: Alle notwendigen Variablen einmal mit den Anfangs Wert zu belegen, den ich brauche.
Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.
Mag sein. Aber drauf verlassen kann man sich nicht. Z.B.müssen Boolean Variablen immer auf False oder True gesetzt werden. Weil sonst nicht der Wert drin ist, der erwartet werden könnte. Bei anderen Datentypen ist das ebenfalls so.
Klassenvariablen kenne ich im Moment nicht so. Meinst du damit Felder wie class test? oder meinst du einfach nur Variablen die in Klassen deklariert werden? oder meinst du damit Eigenschaften?
Damit meine ich Attribute.
Und eine 0 bedeutet boolsch immer noch falsch, darauf kannst du Gift nehmen.
Jakane hat geschrieben:Ich habe in einer Prozedure etwa 20 Variablen
Du könntest Annahmen darüber treffen, wie diese Variablen auf dem Heap verteilt sind und den entsprechenden Speicherbereich mit FillByte() auf Null setzen -- ist aber sehr fehleranfällig.
Erstelle dir einen lokalen Record-Typen mit allen Variablen und lege dir nur eine Variable (Typ Zeiger auf diesen Record-Typen an). Beim Start erstellst du dir diesen Record neu und gibst ihn am Ende wieder frei. Zwischendurch einfach mit FillByte() überschreiben (sicher, da das Speicherlayout/Größe bekannt ist).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
AFAIK.
- Globale Variablen werden beim Start des Programms genullt,
- Variablen die im Header einer Klasse definiert sind werden beim instanzieren (.Create) genullt.
- "0" heißt bei Boolean "False"
AFAIK.
- Globale Variablen werden beim Start des Programms genullt,
- Variablen die im Header einer Klasse definiert sind werden beim instanzieren (.Create) genullt.
- "0" heißt bei Boolean "False"
Ich habe da immer schlechte Erfahrung gemacht. Z.b. ein einfacher Vergleich: if not test then geht nicht zu zuverlässig, wenn man test nicht auf False gesetzt hat. Es gibt sogar einen Grund dafür: So wird eine Doppelte Installisierung vermieden. Ob es ausnahmen gibt weiß ich nicht.
Am Sichersten und einfachsten ist immer noch: Die Variablen Manuell auf False setzten, oder ein Record schreiben und dann eine Funktion wie InitRecordName schreiben. Dann braucht man das nur einmal zu machen.