Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Diese C-Struktur in Delphi?

  Alt 19. Jun 2005, 00:31
Moin Pseudemys Nelsoni,

ich habe packed verwendet, damit der Record auf keinen Fall Lücken im Speicher hat.
Unter Umständen könnten durch Alignment Lücken entstehen, wenn der Compiler Füllbytes in den Record "einstreut", damit auch alle Felder auf einer bestimmten Grenze liegen.
Das ist aber nicht immer sinnvoll, z.B., wenn man den Record an eine Funktion übergibt, die nichts von den Lücken weiss, und dann, eventuell, Daten in die Füllbytes schreibt.

Zitat von Pseudemys Nelsoni:
Die Variable USED_MEM ist aber auch oprtional, oder?
Bei einem Typedef ist das keine Variable, sondern ein Alias für den Typ und darf nicht weggelassen werden. Mindestens ein Alias muss da stehen, mehrere, auch ergänzt um Pointerangaben sind möglich. Nur ohne typedef wäre es eine Variable vom Typ der Struktur.

Es wird dort, zumindest gemäss C-Konventionen, kein Typ deklariert. Das man daraus in Delphi eine Typdeklaration macht ist dann wieder eine andere Sache.
Wenn ich das richtig interpretiere wird, in diesem konkreten Beispiel, der Typ st_used_mem deklariert, was allerdings nicht am typedef, sondern am struct liegt, sowie ein Alias für diesen Typ.

... ....

Also wenn ich mal genau darüber nachdenke, müsste man es in Delphi sogar so deklarieren:

Delphi-Quellcode:
// wegen struct mit Tagname
type
  Pst_used_mem = ^st_used_mem;
  st_used_mem = packed record
    next: Pst_used_mem;
    left: Cardinal;
    size: Cardinal;
  end;

// wegen typedef
  USED_MEM = st_used_mem;
Denn durch struct st_used_mem ist der Typ st_used_mem ja auch deklariert worden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat