delphi - 将 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 作为参数传递时返回的类型是什么?
解决方案
Delphi XE7 中的字符属于WideChar
. 但在 Delphi 2007 中,它们是AnsiChar
.
因此,以下是Ord('A')
每个版本中的返回类型:
德尔福 XE7 - 字
德尔福 2007 - 字节
现在,当您尝试将 Ord('A') 分配给 Delphi XE7 中的 SmallInt 时,编译器会发出警告 - 因为函数的返回类型是无符号的,而您尝试将其分配给的是有符号类型。
有关伪函数行为的更多详细信息,请参阅此答案Ord()
推荐阅读
- swift - 每当我在swift中初始化或创建某个数据类型时,如何让某个函数运行?
- python - 如何在kivy中将小部件放置在图像上方并相对于图像?
- python - 完美包装器(在 Python 中)
- elasticsearch - 在弹性搜索中添加条件以过滤聚合
- apple-watch - 找不到位于 assets.xcassets 中的资源
- c++ - 我的代码中运行时错误的可能原因是什么?
- c# - 确定变量是否属于惰性类型
- python - 在Coregraphe中检查字符串中的单词
- android - Android AppAuth - 遵循 PendingIntent 对象
- python - Pandas:在文本列中搜索关键字列表并对其进行标记