AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lokale Varaiablen bei der Deklaration initialisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokale Varaiablen bei der Deklaration initialisieren

Ein Thema von Viktorii · begonnen am 19. Jul 2007 · letzter Beitrag vom 19. Jul 2007
Antwort Antwort
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 10:56
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:
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

    ...
    ...
    ...
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?

SuFu und Tante Google haben mir nicht wirklich weiterhelfen können.

Vielen Dank im vorraus.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 10:57
[unsinn]
Delphi-Quellcode:
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
  ...
probier das mal.[/unsinn]

//Edit1
stimmt: lokale variablen können nicht initialisiert werden.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 11:00
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Stefan.Buchholtz

Registriert seit: 2. Dez 2004
Ort: Mönchengladbach
7 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 11:03
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
Stefan Buchholtz
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 11:05
"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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#6

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 11:33
Vielen Dank erstmal an alle...

Zitat von Elvis:
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.
Okay, bei dem i hast du natürlich recht. Aber wenn es beispielsweise eine while loop wäre mit dem in-/dekrementierendem i und z.B. einer zweiten Bedingung, muss das i ja auch einen definierten Wert haben ....



Zitat von sirius:
Das würde aber im Code der EXE zu keinem anderen Ergebnis führen, wie deine Variante.
Das ist mir schon klar. Es ging mir halt nur um die Übersichtlichkeit, also nicht alles doppelt stehen zu haben.....
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Lokale Varaiablen bei der Deklaration initialisieren

  Alt 19. Jul 2007, 11:58
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz