Delphi编译时整数转换警告?

时间:2011-07-28 20:01:56

标签: delphi type-conversion compiler-warnings delphi-xe

在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.

2 个答案:

答案 0 :(得分:10)

编译时不会收到任何警告或提示。 Delphi编译器执行执行任何程序流分析,该分析告诉big在分配给small时包含太大的值。它默默地截断值以使其适合较小的类型。我尝试使用Shortint,一个签名的字节大小的类型,甚至没有给出警告或提示。

并且没有办法让Delphi警告你。这会很好。也许你可以在QC中建议它(如果还没有建议的话)?

答案 1 :(得分:1)

在Delphi中,甚至在Delphi 10.3中-不。 但是请看一下名为{Pascal Analyzer“的软件,该软件由www.peganza.com

制造

它们有很多选项,其中之一是(摘自软件“帮助”):

enter image description here

测试源代码,请看#32行:

enter image description here

分析结果显示第32行可能存在错误的分配:

enter image description here