在Delphi中,LongInt和Integer,LongWord和Cardinal有什么区别?
有时我发现DWORD的用法是什么?
它们在所有版本的Delphi中是否一致?我应该坚持哪一个?
最佳答案
简而言之:Longint和Longword是固定大小的整数,前者是有符号的,后者是无符号的,并且通常都是32位大小。在XE8中为Their size is platform-dependent,但在XE7和更早版本中为固定大小(32位)。
整数和基数不是固定大小。它们被称为“泛型”整数(不要将此与泛型混淆,泛型是另一双鞋),即,无论大小如何,在需要整数类型时都应优先使用它们。根据版本和平台,整数和基数的大小可能会有所不同。当前,它们的大小和类型与Longint和Longword相同。
固定大小类型的大小在版本或平台之间没有区别。在必须与来自您自己程序以外的其他来源的代码或数据进行接口时,换句话说,在确切的二进制兼容性很重要的情况下(例如,调用API函数时。因此,使用DWORD等类型。
请注意,当前版本具有Byte或Smallint等类型的别名。它们是Int8,UInt8,Int16,UInt16等,直到UInt64。 ISTM认为这些名称比例如“ Smallint”(16位带符号)或“ Shortint”(8位带符号)。
因此,请尽可能使用Integer和Cardinal,因为它们可能是平台和版本的理想类型。当需要与其他数据完全二进制兼容时,请使用固定大小类型,例如Byte,Smallint,Longint或UInt64。
更新资料
由于存在一些混乱(请参阅顶部附近的链接),并且由于现在不再将Longint和Longword视为固定大小的平台独立的了,但是,很奇怪的是,Integer和Cardinal被认为是固定大小的,所以我越来越倾向于使用(U)IntXX版本,例如UInt16或Int32。一个例外是我对Byte的使用,我无法想象改变它的大小(为1)。
当然,对于大小不那么重要的整数类型的任何事物,我都会使用Integer和Cardinal。用于循环计数器等