Delphi siempre ha admitido algunos tipos numéricos básicos y me preguntaba cómo se relacionan entre sí.¿Cómo se relacionan los tipos básicos de Delphi entre sí?
En Delphi 2007 me encontré con estas declaraciones (algunas son contradictorios, algunos son meros 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;
Esto me lleva a pensar que los tipos numéricos con signo base son SmallInt, Integer e Int64. Sin firmar, hay Byte, WORD y UInt64. Pero, ¿cuál es la diferencia entre Cardinal y LongWord? (Por cierto, ¿cuál es la carcasa original y prevista para estos tipos?)
¿Y hay un tipo de enteros de 8 bits con signo (Int8)?
// Int8 = ?unknown?;
UInt8 = Byte;
Int16 = SmallInt;
UInt16 = Word;
Int32 = Integer;
UInt32 = LongWord;
// Int64 already exists
// UInt64 already exists
Por último, ¿cómo debería definir int y uint, especialmente con respecto a C/C++ compatibilidad y un futuro cambio a otras plataformas (posiblemente también 64 bits)? (Una cuestión relacionada es, por supuesto, cómo se definirá los distintos tipos numéricos de 64 bits de Delphi?)
Gracias por todos los comentarios, lo que he aprendido de esto es que los tipos básicos como UInt8 y todas las variantes deberían haberse usado como, ¡bueno, lo básico! Sería bueno que una futura versión de Delphi (o FPC) cambiara sus declaraciones de tipo, de modo que los tipos no tan básicos se derivan claramente de los conceptos básicos. Esperaría ver algo como esto en Types.pas o System.pas: tipo Entero = {$ IFDEF CPU64} Int64 {$ ELSE} Int32 {$ ENDIF}; Apenas mis 5 centavos, sin embargo. – PatrickvL