*有时*在Delphi中分配常量时会出错

时间:2009-04-24 15:43:14

标签: delphi delphi-2007

我正在使用Delphi 2007包含所有补丁和更新。

我有一个由两个不同项目使用的文件。在该文件中是一个过程,我将简化如下:

procedure MyProcedure;
const
  UniqueValue: integer = 0;
begin
  //some code
  Inc(UniqueValue);
  //some more code
end;

Inc()命令应该失败,因为您无法分配常量。在一个项目中,我得到了一个错误(我将该项目称为“准确”)。在另一个项目中,我没有任何错误(我称之为“Bogus”)。我也没有收到任何警告。我无法弄清楚为什么编译器会通过这个错误的代码。

以下是我在项目Bogus中尝试的内容:

1 - 引入一个明显的错误,比如在一行中键入“slkdjflskdjf”

结果:我收到错误,证明它确实在尝试编译此文件。

2 - 删除.DCU,然后重建项目

结果:重新生成.DCU,再次证明项目真正编译了这个错误的代码。

有没有人想过为什么会出现这种情况?更具体地说,为什么它会出现在一个项目而不是另一个项目?是否有一些模糊的编译器选项允许分配常量?

最后一点说明:这两个项目都是从Delphi 5转换而来的。在Delphi 5下,代码类似,它们都编译得很好。

编辑:感谢您的帮助。更改可分配的类型化常量指令后,我可以在两个项目中获得一致的行为。我今天学到了一些东西......

4 个答案:

答案 0 :(得分:14)

在编译器选项中有一个名为“Assignable typed constants”的选项。它也可以在代码中使用“{$ J +}”启用。

答案 1 :(得分:5)

可能是那些项目在$ J编译器指令的设置上有所不同吗?

答案 2 :(得分:4)

我建议检查项目选项,编译器部分,看看是否能发现任何差异。也许您在Bogus项目中启用了选项可分配的类型常量

答案 3 :(得分:3)

正如其他人所说,几乎可以肯定是{$J+}指令。

如果你有一个diff工具,你可以比较项目文件,看看它们之间的区别 - 它们只是文本文件 - 以便将来解决类似的问题。