Delphi supporta da tempo alcuni tipi numerici di base e mi chiedevo in che modo sono correlati l'uno con l'altro.In che modo i tipi base di Delphi sono correlati tra loro?
In Delphi 2007 ho trovato queste dichiarazioni (alcuni sono in conflitto, alcuni sono semplici aliasses):
Types.pas:
DWORD = LongWord;
Largeint = Int64;
getmem.inc:
DWORD = Integer;
Windows. pas:
DWORD = Types.DWORD;
SHORT = Smallint;
UINT = LongWord;
ULONG = Cardinal;
LONGLONG = Int64;
TLargeInteger = Int64;
ULONGLONG = UInt64;
Questo mi porta a pensare che i tipi numerici con segno di base siano SmallInt, Integer e Int64. Senza firma, c'è Byte, WORD e UInt64. Ma qual è la differenza tra Cardinal e LongWord? (A proposito, qual è l'involucro originale e previsto per questi tipi?)
E c'è un tipo per interi a 8 bit con segno (Int8)?
// Int8 = ?unknown?;
UInt8 = Byte;
Int16 = SmallInt;
UInt16 = Word;
Int32 = Integer;
UInt32 = LongWord;
// Int64 already exists
// UInt64 already exists
Infine, come devo definire int e uint, con particolare riguardo alla C/C++ compatibilità e un interruttore futuro per altre piattaforme (eventualmente anche a 64 bit)? (Una questione collegata è, naturalmente, come farà i vari tipi numerici essere definita in 64 bit di Delphi?)
Grazie per tutti i commenti - quello che ho imparato da questo è che i tipi di base come UInt8 e tutte le varianti dovrebbero essere stati usati come, beh, le basi! Sarebbe bello se una versione futura di Delphi (o FPC) trasformasse le dichiarazioni di tipo in giro, in modo che i tipi non di base siano chiaramente derivati dalle basi. Mi piacerebbe vedere qualcosa di simile in Tipi.pas o System.pas: tipo Intero = {$ IFDEF CPU64} Int64 {$ ELSE} Int32 {$ ENDIF}; Solo i miei 5 centesimi, però. – PatrickvL