Code: Alles auswählen
procedure test;
var
Data: array [0..255] of byte;
begin
FillByte(Data, SizeOf(Data),$00);
end;
Code: Alles auswählen
project1.lpr(7,16) Hint: Local variable "Data" does not seem to be initialized
Code: Alles auswählen
procedure test;
var
Data: array [0..255] of byte;
begin
FillByte(Data, SizeOf(Data),$00);
end;
Code: Alles auswählen
project1.lpr(7,16) Hint: Local variable "Data" does not seem to be initialized
Code: Alles auswählen
program a;
procedure test;
var
Data: array [0..255] of byte;
begin
FillByte(Data, SizeOf(Data),$00);
end;
begin
test;
end.
Code: Alles auswählen
$ fpc a.pas
Free Pascal Compiler version 3.2.0 [2020/06/27] for x86_64
Copyright (c) 1993-2020 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling a.pas
Linking a
12 lines compiled, 0.4 sec
$
Nein, eine brandneu.Benutzt Du eventuell eine deutlich ältere FPC-Version?
Code: Alles auswählen
program Project1;
procedure ExtractNumber(var s: String);
var
i: Integer;
begin
i := Length(s);
while i > 0 do
begin
if not (s[i] in ['0'..'9']) then
Delete(s, i, 1);
dec(i);
end;
end;
var
s: String = '';
begin
ExtractNumber(s);
end.
Also gehen tut das schon:wp_xyz hat geschrieben: Mi 10. Apr 2024, 20:22 Bei "Data: array[0..255] of byte" geht das nicht, da würde ich auf den Hint rechts-klicken und die Option zum Ignorieren der Meldung auswählen.
Code: Alles auswählen
var
Data: array [0..255] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Wäre es da nicht einfacher, folgendes zu machen:Also gehen tut das schon:
...
Code: Alles auswählen
procedure test;
var
Data: array [0..255] of byte;
begin
Data[0]:=0; // <--- neu
FillByte(Data, SizeOf(Data),$00);
end;
Jop, stimmt, das ist bei Aufruf per Kommandozeile nicht der Fall und da ich das auch nicht in der .fpc.cfg habe, ist das mal die Antwort auf meine eigene Frage.Und in dem Zusammenhang konnte ich auch gleich testen (und bestätigen), dass mein ...Hast du hier einen Haken:
Code: Alles auswählen
Data[0] := 0
Könnte sein, dass nun ein Hint kommt a la "Not all elements initialized"...Stevie hat geschrieben: Mi 10. Apr 2024, 21:04Code: Alles auswählen
procedure test; var Data: array [0..255] of byte; begin Data[0]:=0; // <--- neu FillByte(Data, SizeOf(Data),$00); end;
Code: Alles auswählen
type
TByteArray256 = array[0..255] of Byte;
var
Data: TByteArray256;
begin
Data := Default(TByteArray256);
FillByte(Data, SizeOf(Data), 0);
Könnte man da nicht das FillChar weglassen, ausser man will was anderes als $00 ?wp_xyz hat geschrieben: Mi 10. Apr 2024, 22:42 Wenn "array[0..255] of byte" ein eigener Typ wäre, z.B. TByteArray256, dann könnte man das Folgende machen:Code: Alles auswählen
type TByteArray256 = array[0..255] of Byte; var Data: TByteArray256; begin Data := Default(TByteArray256); FillByte(Data, SizeOf(Data), 0);
Code: Alles auswählen
type
Tvec=array[0..2] of Single = default(1, 0, 0);
var
vec:Tvec;
Schon wieder was neues gelernt, das mit den Rechtsklick kannte ich nicht, habe bis jetzt immer manuell das {%H-} eingefügt.Bei "Data: array[0..255] of byte" geht das nicht, da würde ich auf den Hint rechts-klicken und die Option zum Ignorieren der Meldung auswählen.
Es ist aus zwei Gründen ein var- und kein out-Parameter:wp_xyz hat geschrieben: Mi 10. Apr 2024, 20:22 Es würde helfen, den Parameter in FillByte mit "out" zu deklarieren (kann man natürlich nicht ohne die FPC Routine zu ändern), denn dann wird für Data kein Eingabewert erwartet/benötigt.
Natürlich.Mathias hat geschrieben: Do 11. Apr 2024, 17:07Könnte man da nicht das FillChar weglassen, ausser man will was anderes als $00 ?wp_xyz hat geschrieben: Mi 10. Apr 2024, 22:42 Wenn "array[0..255] of byte" ein eigener Typ wäre, z.B. TByteArray256, dann könnte man das Folgende machen:Code: Alles auswählen
type TByteArray256 = array[0..255] of Byte; var Data: TByteArray256; begin Data := Default(TByteArray256); FillByte(Data, SizeOf(Data), 0);
Auf meiner Wunschliste wäre, das "Default" direkt bei der deklaration einsetzen zu können:Mathias hat geschrieben: Do 11. Apr 2024, 17:07 Was noch echt cool wäre, wen es sowas in dieser Art geben würde:Code: Alles auswählen
type Tvec=array[0..2] of Single = default(1, 0, 0); var vec:Tvec;
Code: Alles auswählen
type
TData = record
Name: String;
X, Y: Integer;
Description: String;
end;
var
Data: TData = default;