有时在Delphi中给常量赋值时会出现错误。

8

我正在使用安装了所有补丁和更新的Delphi 2007。

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

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

Inc()命令应该会失败,因为你不能将其赋值给常量。在一个项目中,我得到了这样的错误(我称之为“准确”)。在另一个项目中,我没有得到任何错误(我称之为“虚假”)。我也没有收到任何警告。我无法弄清楚编译器为什么会让这个不正确的代码通过。
以下是我在虚假项目中尝试过的:
1 - 引入一个明显的错误,比如在一行中键入“slkdjflskdjf”。
结果:我得到了一个错误,证明它确实在尝试编译这个文件。
2 - 删除.DCU并重建项目
结果:.DCU被重新生成,再次证明了该项目确实在编译这个错误的代码。
有人对为什么会出现这种行为有想法吗?更具体地说,为什么会在一个项目中发生而在另一个项目中不发生?是否有一些模糊的编译器选项允许将常量分配给常量?
最后一点说明:两个项目都是从Delphi 5转换过来的。在类似的代码下,它们都可以很好地编译。
编辑:感谢您所有的帮助。在更改可分配类型常量指令后,我可以在两个项目中获得一致的行为。今天我学到了新东西...
4个回答

14

有一种名为“可赋类型常量”的选项位于编译器选项中,它也可以通过在代码中添加 "{$J+}" 来启用。


5

这些项目的设置$J编译指令可能不同吗?


4

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


3

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

如果您有一个差异分析工具,您可以比较项目文件以查看它们的区别 - 它们只是文本文件 - 以便在将来解决类似问题时使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接