首页 > 解决方案 > 将 Char 作为参数传递时,哪种类型返回 System.Ord?

问题描述

在 Delphi 2007 项目中,我使用System.Ord的功能如下:

var
  Tmp : SmallInt;
begin
  Tmp := Ord('A');

  if(Tmp = Ord('A')) then
    ShowMessage('A');
end;

Delphi XE7 下的相同代码会导致以下编译器警告消息:

[dcc32 警告] Unit1.pas(31): W1023 比较有符号和无符号类型 - 扩大了两个操作数

提示告诉它返回一个Smallint

在此处输入图像描述

我发现System.Ord文档指出:

X 是 Delphi 序数类型的表达式。结果是 X 的序数位置;它的类型是最小的标准整数类型,可以保存 X 类型的所有值。

Ord 不能对 Int64 值进行操作。

在 Delphi XE7 中将 Char 作为参数传递时返回的类型是什么?

标签: delphitypescompiler-warningsdelphi-xe7

解决方案


Delphi XE7 中的字符属于WideChar. 但在 Delphi 2007 中,它们是AnsiChar.

因此,以下是Ord('A')每个版本中的返回类型:

德尔福 XE7 - 字

德尔福 2007 - 字节

现在,当您尝试将 Ord('A') 分配给 Delphi XE7 中的 SmallInt 时,编译器会发出警告 - 因为函数的返回类型是无符号的,而您尝试将其分配给的是有符号类型。

有关伪函数行为的更多详细信息,请参阅此答案Ord()


推荐阅读