我正在使用安装了所有补丁和更新的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转换过来的。在类似的代码下,它们都可以很好地编译。
编辑:感谢您所有的帮助。在更改可分配类型常量指令后,我可以在两个项目中获得一致的行为。今天我学到了新东西...