![]() |
Lokale Varaiablen bei der Deklaration initialisieren
Moin zusammen.
Evtl. ne dumme Frage, aber ich habe bis jetzt nur wenig Erfahrung in Delphi. Bin eigentlich ehr ein C Mensch. Ich mag es nicht wenn Variablen uninitialisiert in Gegend rumstehen. Bis jetzt mache ich die Initialisierung so:
Delphi-Quellcode:
Ich finde es aber doof die ganze Latte der deklarierten Variablen noch mal am Anfang der Funktion für die Initialisierung aufzuführen. Gibt es da nicht eine Möglichkeit wie z.B. bei C, die Initialisierung gleich bei der Deklaration durchzuführen?
function SendByte(Byte: char; devHAndle: FT_HANDLE):Integer;
var ret : FT_Return; WriteBuffer : array[1..8] of byte; NumberOfBytesToWrite : Integer; NumberOfBytesWritten : DWORD; i : Integer; begin ret := 0; NumberOfBytesToWrite := 8; NumberOfBytesWritten := 0; i := 0; for i := 1 to 8 do begin ... ... ... SuFu und Tante Google haben mir nicht wirklich weiterhelfen können. Vielen Dank im vorraus. |
Re: Lokale Varaiablen bei der Deklaration initialisieren
[unsinn]
Delphi-Quellcode:
probier das mal.[/unsinn]
function SendByte(Byte: char; devHAndle: FT_HANDLE):Integer;
var ret : FT_Return; WriteBuffer : array[1..8] of byte = (1,2,3,4,5,6,7,8); NumberOfBytesToWrite : Integer = 0; NumberOfBytesWritten : DWORD = 9; i : Integer = 456; begin ... //Edit1 stimmt: lokale variablen können nicht initialisiert werden. |
Re: Lokale Varaiablen bei der Deklaration initialisieren
Nein, geht leider in Delphi nicht.
Aber es macht auch nicht immer Sinn lokale Variablen zu initialisieren. Dein i zum Beispiel wird hoffentlich nur innerhalb des for-loops benutzt und innerhalb des Blockes ist sein Wert immer genau definiert. Nur wenn du tatsächlich einen Wert auslesen könntest, dem noch nix zugewiesen wurde, lohnt es sich ihn zu initialisieren. |
Re: Lokale Varaiablen bei der Deklaration initialisieren
Nein, in Delphi können lokale Variablen nicht bei der Deklaration initialisiert werden.
Redundante Zuweisungen (wie z.B. auf i in deinem Beispiel) werden vom Delphi-Compiler ohnehin rausoptimiert. Weil der Compiler auch davor warnt, wenn auf den Wert einer nicht initialisierten Variablen zugegriffen wird, ist eine generelle Initialisierung aller lokalen Variablen meiner Meinung nach ohnehin nicht sinnvoll. Stefan |
Re: Lokale Varaiablen bei der Deklaration initialisieren
"Lokale Variablen können nicht initialisiert werden."
Liegt einfach daran, dass es keinen Sinn macht. Globale Variablen werden ja schon in der Datei im Datensegment (DataSection) "gespeichert". Da lohnt es sich ihnen gleich einen Wert zu geben. Lokale Variablen liegen auf dem Stack (wenn üpberhaupt; manchmal ja nur in den Registern). Da ist eine Initialisierung vom Compiler nicht möglich. Also müsste sie zur Laufzeit geschehen. Nun könnte Delphi zwar (wie C) zulassen, dass man sowas, wie fwsp, in der Deklaration mit angeben kann. Das würde aber im Code der EXE zu keinem anderen Ergebnis führen, wie deine Variante. |
Re: Lokale Varaiablen bei der Deklaration initialisieren
Vielen Dank erstmal an alle...
Zitat:
Zitat:
|
Re: Lokale Varaiablen bei der Deklaration initialisieren
Die frühe Initialisierung von Variablen beeinträchtigt allerdings die Wartbarkeit. Man sollte die Zugriffe auf Variablen generell bündeln. Wenn Du eine solchermassen im Funktionskopf initialiserte Variable erst sehr viel später (weiter unten) benutzt, hast Du den ursprünglich zugewiesenen Wert nicht im Blick, musst blättern usw.
Gefährlich kann dies auch sein, wenn nachträglich eine äußere Schleife eingeführt wird. Dann passiert die Initialisierung nämlich ohne weitere Änderungen nur einmal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz