Das ist die alte Syntax aus C89. Der Hauptkritikpunkt an dieser Syntax war das wenn sich die Anordnung der Felder in der Struct ändert, oder neue Felder hinzukommen, es zu schwer zu findenden bugs kommen kann, weshalb mit C99 diese Sytax durch die neue ersetzt wurde.
Compiler unterstützen aber grundsätzlich beides, aber seit C99 ist die syntax ohne Feldbezeichner nicht mehr standardkonform
Record mit $00 befüllen.
-
- Beiträge: 962
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Record mit $00 befüllen.
Das steht noch auf meiner ToDo-Liste, da Delphi dies auch unterstützt.Mathias hat geschrieben: So 8. Dez 2024, 17:23 Jetzt wäre noch super wen sowas gehen würde.
Besonders wen es sich um einen komplexen Record handelt.Code: Alles auswählen
procedure Test; const foo: TfooRec=default(TfooRec);
FPC Compiler Entwickler
-
- Beiträge: 6956
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Record mit $00 befüllen.
Dies macht eigentlich sinn, vor allem bei komplexen Sachen. Aber bei einfachen Sachen wie ein Rechteck, ist die erste Variante vorzuziehen.Warf hat geschrieben: Mo 9. Dez 2024, 19:11 Das ist die alte Syntax aus C89. Der Hauptkritikpunkt an dieser Syntax war das wenn sich die Anordnung der Felder in der Struct ändert, oder neue Felder hinzukommen, es zu schwer zu findenden bugs kommen kann, weshalb mit C99 diese Sytax durch die neue ersetzt wurde.
Compiler unterstützen aber grundsätzlich beides, aber seit C99 ist die syntax ohne Feldbezeichner nicht mehr standardkonform
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6956
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Record mit $00 befüllen.
Wen man mit Pointer arbeitet, kann man den Speicher direkt mit AllocMem mit $00 befüllen.
Man findet immer wieder neues.
https://www.freepascal.org/docs-html/rt ... ocmem.html
Man findet immer wieder neues.

Code: Alles auswählen
type
TTestRec = record
x, y, z: single;
end;
PTestRec = ^TTestRec;
var
test: PTestRec;
begin
test := AllocMem(SizeOf(TTestRec)); // Speicher wird mit $00 befüllt
WriteLn(test^.x);
WriteLn(test^.y);
WriteLn(test^.z);
Freemem(test);
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot