Hallo, ich habe eine identische Meldung und wollte deshalb keinen neuen Thread aufmachen.
Bei der Suche landete ich ja hier
Ich bekomme immer eine Meldung wenn ich eine Variable Übergebe, dass diese nicht initialisiert wurde.
Das braucht sie ja auch nicht, da die aufgerufene Funktion dies tut. Die Funktion hat einen var Parameter
So habe ich in den Meldungen den Haken rausgenommen, das ändert aber nichts.
Kann man da noch etwas umstellen ?
Das tut ja nicht weh, aber bei Var Parametern würde ich das gern keine Meldung bekommen.
Ich danke Euch für Infos:
Compiler-Warnung: nicht initialisierte Variable
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Compiler-Warnung: nicht initialisierte Variable
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2640
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Compiler-Warnung: nicht initialisierte Variable
siro hat geschrieben:Hallo, ich habe eine identische Meldung und wollte deshalb keinen neuen Thread aufmachen.
Schlechte Idee: der alte Thread ist von 2008 und es ist eben keine identische Meldung. Ich hab das mal in ein neues Thema verschoben.
siro hat geschrieben:Ich bekomme immer eine Meldung wenn ich eine Variable Übergebe, dass diese nicht initialisiert wurde.
[...]
Das tut ja nicht weh, aber bei Var Parametern würde ich das gern keine Meldung bekommen.
Initialisiere die Variabel doch ganz einfach.
Code: Alles auswählen
var
value: Integer = 0;
begin
Getv(value);
end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: nochmal ne Warnung des Kompilers
Der Compiler "denkt" da einfach zuwenig: Wenn ein Prozedur-Parameter als var deklariert ist, heißt das, dass die Variable sowohl für Ein- als auch Ausgabe verwendbar ist. Wenn in der aufrufenden Routine keine Wertzuweisung erfolgt, ist der Parameter als Eingabe-Parameter undefiniert. Dass du die Eingabemöglichkeit gar nicht ausnützt, spielt keine Rolle - das "weiß" der Compiler offenbar nicht, es müsste eine tiefergehende Analyse durchgeführt werden, und wir alle würden uns wundern, warum ein Compiliervorgang so lange dauert.
Wenn du stattdessen den Parameter als "out" deklarierst, ist klar, dass der Eingabewert ignoriert werden soll und nur der Ausgabewert eine Rolle spielt, und die Warnung bleibt aus:
Leider gibt es in den nicht selbst-geschriebenen Prozeduren immer wieder Fälle, bei denen eigentlich "out" benötigt, aber "var" verwendet wird. Um nicht von zu vielen zu ignorierenden Meldungen überschwemmt zu werden, gibt es im Nachrichten-Fenster die Möglichkeit, auf der entsprechenden Meldungszeile rechts zu klicken und den Punkt "Hide message by inserting IDE directive {%H-}" anzuwählen - damit wird in der Deklaration des Parameters ein {%H-} vorangestellt und die Meldung unterdrückt.
Wenn du stattdessen den Parameter als "out" deklarierst, ist klar, dass der Eingabewert ignoriert werden soll und nur der Ausgabewert eine Rolle spielt, und die Warnung bleibt aus:
Code: Alles auswählen
procedure Getv(out x: Integer);
begin
x := 1234;
end;
Leider gibt es in den nicht selbst-geschriebenen Prozeduren immer wieder Fälle, bei denen eigentlich "out" benötigt, aber "var" verwendet wird. Um nicht von zu vielen zu ignorierenden Meldungen überschwemmt zu werden, gibt es im Nachrichten-Fenster die Möglichkeit, auf der entsprechenden Meldungszeile rechts zu klicken und den Punkt "Hide message by inserting IDE directive {%H-}" anzuwählen - damit wird in der Deklaration des Parameters ein {%H-} vorangestellt und die Meldung unterdrückt.
Re: Compiler-Warnung: nicht initialisierte Variable
m.fuchs hat geschrieben:siro hat geschrieben:Ich hab das mal in ein neues Thema verschoben.
Wer zu spät kommt, ... Meine Antwort steht in dem anderen Thread.
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: nochmal ne Warnung des Kompilers
Die Variable kann ich natürlich initialisieren, aber das ist ja nicht Sinn der Sache, frisst zu viel Code
Spass beiseite:
Ich pack mal die Antwort von wp_xyz hier mit rein, weil da ist richtig viel GUTE INFO drin:
Hab vielen Dank dafür:
Das Schlüsselwort out kannte ich überhaupt noch nicht und das stellt natürlich eine
"sehr saubere Lösung" dar. Das werde ich ab sofort so übernehmen.
Dann habt ein geruhsames Wochenende.
Siro
Spass beiseite:
Ich pack mal die Antwort von wp_xyz hier mit rein, weil da ist richtig viel GUTE INFO drin:
Hab vielen Dank dafür:
Der Compiler "denkt" da einfach zuwenig: Wenn ein Prozedur-Parameter als var deklariert ist, heißt das, dass die Variable sowohl für Ein- als auch Ausgabe verwendbar ist.
Wenn in der aufrufenden Routine keine Wertzuweisung erfolgt, ist der Parameter als Eingabe-Parameter undefiniert. Dass du die Eingabemöglichkeit gar nicht ausnützt,
spielt keine Rolle - das "weiß" der Compiler offenbar nicht, es müsste eine tiefergehende Analyse durchgeführt werden, und wir alle würden uns wundern,
warum ein Compiliervorgang so lange dauert.
Wenn du stattdessen den Parameter als "out" deklarierst, ist klar, dass der Eingabewert ignoriert werden soll und nur der Ausgabewert eine Rolle spielt, und die Warnung bleibt aus:
Code: Alles auswählen
procedure Getv(out x: Integer);
begin
x := 1234;
end;
Leider gibt es in den nicht selbst-geschriebenen Prozeduren immer wieder Fälle, bei denen eigentlich "out" benötigt, aber "var" verwendet wird.
Um nicht von zu vielen zu ignorierenden Meldungen überschwemmt zu werden, gibt es im Nachrichten-Fenster die Möglichkeit,
auf der entsprechenden Meldungszeile rechts zu klicken und den Punkt "Hide message by inserting IDE directive {%H-}" anzuwählen
- damit wird in der Deklaration des Parameters ein {%H-} vorangestellt und die Meldung unterdrückt.
Das Schlüsselwort out kannte ich überhaupt noch nicht und das stellt natürlich eine
"sehr saubere Lösung" dar. Das werde ich ab sofort so übernehmen.
Dann habt ein geruhsames Wochenende.
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Compiler-Warnung: nicht initialisierte Variable
Die Variable kann ich natürlich initialisieren, aber das ist ja nicht Sinn der Sache, frisst zu viel Code
Spass beiseite:
Ich pack mal die Antwort von wp_xyz hier mit rein, weil da ist richtig viel GUTE INFO drin:
Hab vielen Dank dafür:
Das Schlüsselwort out kannte ich überhaupt noch nicht und das stellt natürlich eine
"sehr saubere Lösung" dar. Das werde ich ab sofort so übernehmen.
Dann habt ein geruhsames Wochenende.
Siro
Spass beiseite:
Ich pack mal die Antwort von wp_xyz hier mit rein, weil da ist richtig viel GUTE INFO drin:
Hab vielen Dank dafür:
Der Compiler "denkt" da einfach zuwenig: Wenn ein Prozedur-Parameter als var deklariert ist, heißt das, dass die Variable sowohl für Ein- als auch Ausgabe verwendbar ist.
Wenn in der aufrufenden Routine keine Wertzuweisung erfolgt, ist der Parameter als Eingabe-Parameter undefiniert. Dass du die Eingabemöglichkeit gar nicht ausnützt,
spielt keine Rolle - das "weiß" der Compiler offenbar nicht, es müsste eine tiefergehende Analyse durchgeführt werden, und wir alle würden uns wundern,
warum ein Compiliervorgang so lange dauert.
Wenn du stattdessen den Parameter als "out" deklarierst, ist klar, dass der Eingabewert ignoriert werden soll und nur der Ausgabewert eine Rolle spielt, und die Warnung bleibt aus:
Code: Alles auswählen
procedure Getv(out x: Integer);
begin
x := 1234;
end;
Leider gibt es in den nicht selbst-geschriebenen Prozeduren immer wieder Fälle, bei denen eigentlich "out" benötigt, aber "var" verwendet wird.
Um nicht von zu vielen zu ignorierenden Meldungen überschwemmt zu werden, gibt es im Nachrichten-Fenster die Möglichkeit,
auf der entsprechenden Meldungszeile rechts zu klicken und den Punkt "Hide message by inserting IDE directive {%H-}" anzuwählen
- damit wird in der Deklaration des Parameters ein {%H-} vorangestellt und die Meldung unterdrückt.
Das Schlüsselwort out kannte ich überhaupt noch nicht und das stellt natürlich eine
"sehr saubere Lösung" dar. Das werde ich ab sofort so übernehmen.
Dann habt ein geruhsames Wochenende.
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...