在Delphi XE或2006中,有没有办法在编译时检测 整数类型之间的隐式转换可能会丢失数据?我意识到可以通过运行时检查来检测这一点。我希望它标记以下示例,即使“big”值为1。(我们正在考虑将int更改为bigint以用于某些数据库键,并希望确定对大型遗留代码库的影响。)
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
small: Integer;
big: Int64;
begin
big := 3000000000000;
small := big; // Detect me!
Writeln(small);
end.
答案 0 :(得分:10)
编译时不会收到任何警告或提示。 Delphi编译器执行不执行任何程序流分析,该分析告诉big
在分配给small
时包含太大的值。它默默地截断值以使其适合较小的类型。我尝试使用Shortint
,一个签名的字节大小的类型,甚至没有给出警告或提示。
并且没有办法让Delphi警告你。这会很好。也许你可以在QC中建议它(如果还没有建议的话)?
答案 1 :(得分:1)
在Delphi中,甚至在Delphi 10.3中-不。 但是请看一下名为{Pascal Analyzer“的软件,该软件由www.peganza.com
制造它们有很多选项,其中之一是(摘自软件“帮助”):
测试源代码,请看#32行:
分析结果显示第32行可能存在错误的分配: