Compiler-Warnung: nicht initialisierte Variable

Für Fragen rund um die Ide und zum Debugger

Compiler-Warnung: nicht initialisierte Variable

Beitragvon siro » 7. Apr 2017, 15:01 Compiler-Warnung: nicht initialisierte Variable

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:

Init_01.jpg


Init_02.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Grüße von Siro
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 110
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 7. Apr 2017, 15:16 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;
"Heute code ich, morgen debugge ich, und übermorgen caste ich die Königin auf int."

http://www.michael-fuchs.net
m.fuchs
 
Beiträge: 1503
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon wp_xyz » 7. Apr 2017, 15:32 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:
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.
wp_xyz
 
Beiträge: 1787
Registriert: 8. Apr 2011, 08:01

Beitragvon wp_xyz » 7. Apr 2017, 15:35 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.
wp_xyz
 
Beiträge: 1787
Registriert: 8. Apr 2011, 08:01

Beitragvon siro » 7. Apr 2017, 16:56 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 :lol:
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
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 110
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon siro » 7. Apr 2017, 16:58 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 :lol:
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
"C" verCehnfacht die Entwicklungszeit...
siro
 
Beiträge: 110
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Benutzung der IDE



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried