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?
alle Variablen auf 0 setzen
alle Variablen auf 0 setzen
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?
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.
Win XP
Win XP
-
pluto
- Lazarusforum e. V.
- Beiträge: 7193
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: alle Variablen auf 0 setzen
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.
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.
MFG
Michael Springwald
Michael Springwald
Re: alle Variablen auf 0 setzen
hmm ok
bleib ich bei der Einzelzuweisung
aber hätte ja sein könn
aber hätte ja sein könn
Die Welt besteht aus Zahlen, also ist alles möglich.
Win XP
Win XP
-
pluto
- Lazarusforum e. V.
- Beiträge: 7193
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: alle Variablen auf 0 setzen
Wenn das Eigenschaften einer Klasse, wären, könntest du mit Hilfe der RTTI Alle Eigenschaften auf 0 setzten *G*.
MFG
Michael Springwald
Michael Springwald
-
carli
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: alle Variablen auf 0 setzen
Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.pluto hat geschrieben:Wenn das Eigenschaften einer Klasse, wären, könntest du mit Hilfe der RTTI Alle Eigenschaften auf 0 setzten *G*.
-
pluto
- Lazarusforum e. V.
- Beiträge: 7193
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: alle Variablen auf 0 setzen
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.Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.
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.
MFG
Michael Springwald
Michael Springwald
-
carli
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: alle Variablen auf 0 setzen
Damit meine ich Attribute.pluto hat geschrieben: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.Mal abgesehn, dass Klassenvariablen vor dem Aufruf des Konstruktors genullt werden, um den Destruktor bei Exceptions während der Konstruktion aufrufen zu können.
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?
Und eine 0 bedeutet boolsch immer noch falsch, darauf kannst du Gift nehmen.
-
Socke
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: alle Variablen auf 0 setzen
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.Jakane hat geschrieben:Ich habe in einer Prozedure etwa 20 Variablen
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
MAC
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: alle Variablen auf 0 setzen
zur Sockes Recordtheorie 
und dann in der procedure
ist sogar noch relativ einfach 
Code: Alles auswählen
TMyRecord = record
a,b,c:integer;
end;
const
NullRecord:TMyRecord = (a:0;b:0;c:0);Code: Alles auswählen
procedure abc(arec:TMyRecord);
begin
arec := NullRecord;
end;Code: Alles auswählen
Signatur := nil;-
mschnell
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: alle Variablen auf 0 setzen
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"
-Michael
- 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"
-Michael
-
pluto
- Lazarusforum e. V.
- Beiträge: 7193
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: alle Variablen auf 0 setzen
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.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"
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.
MFG
Michael Springwald
Michael Springwald