Einzelnen Beitrag anzeigen

Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Integer und Cardinal bei 32 Bit eingefroren? NativeInt?

  Alt 5. Apr 2010, 12:57
In älteren Quelltexten finde ich regelmäßig Zeigerarithmetik:
Delphi-Quellcode:
var
  Ptr: Pointer;
begin
  Inc(Integer(Ptr));
end;
Da für den Typ Pointer die Zeigerarithmetik nicht definiert ist, hat man sich in der Vergangenheit oft mit dem Typ Integer beholfen. Das funktioniert aber nur wenn SizeOf(Integer) = SizeOf(Pointer). Um darauf nicht angewiesen zu sein, stelle ich bei mir um, und verwende den Typ PByte, für den die Zeigerarithmetik definiert ist:Inc(PByte(Ptr)); Schaut man mal in die RTL oder VCL, wird dort mit den Typen Pointer und Integer freigiebig umgegangen. Vom Hörensagen her, wird der Typ Integer (und Cardinal?) 32 Bit lang bleiben (z.B. hier angesprochen). Das widerspricht in meinen Augen der Hilfe zu "einfachen Typen":
Zitat:
Es gibt zwei generische Integer-Typen: Integer und Cardinal. Diese Typen sollten, wenn möglich, immer verwendet werden, da sie die optimale Ausführungsgeschwindigkeit für die zugrunde liegende CPU und das Betriebssystem gewährleisten.
Wird auch Cardinal bei 32 Bit eingefroren?
Weiß vielleicht jemand, wo man etwas gegen diesen Blödsinn tun kann, Integer bei 32 Bit einzufrieren?

Ich denke an 32- oder 64-Bit-Programme vom selben Quelltext. Was nutzt ein 64-Bit-Kompiler, wenn die Datentypen nicht mitwachsen? Soll dann etwa überall auf NativeInt umgestellt werden!? Ich habe eigentlich noch genug von der Zwangsumstellung der Standardimplementierung von String und Char als Unicode. Wenigstens würde im Falle von Integer das hier gehen: Wenn die anderen nicht wollen, dass Integer mitwächst, ich will:
Delphi-Quellcode:
type
  Integer = type NativeInt;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat