为什么Delphi编译器没有警告重新定义的常量?

时间:2013-06-25 08:52:48

标签: delphi constants

我的一位同事撞到了一个突然“改变了价值”的常数; 原来,它被重新宣布:

unit Unit1;

interface

const
   MyConstant = 1;

implementation

end.

-

unit Unit2;

interface

const
   MyConstant = 2;

implementation

end.

-

Uses Unit1, Unit2;
// Uses Unit2, Unit1;

procedure TFrmRedefineConstant.FormShow(Sender: TObject);
begin
   ShowMessage('MyConstant: ' + IntToStr(MyConstant));
end;

这显示2。如果您在Uses语句中交换单位订单,则会显示1

很好,但为什么Delphi编译器没有警告重复的常量名称(这会非常有帮助)?
我能做些什么来启用警告(看起来不那么)。

1 个答案:

答案 0 :(得分:6)

由于Delphi记录了范围规则。来自语言指南:

  

单位在uses子句中出现的顺序决定了   它们的初始化顺序并影响标识符的方式   由编译器定位。如果两个单位声明一个变量,常量,   类型,过程或具有相同名称的函数,编译器使用   一个来自使用条款中最后列出的单位。 (访问   来自其他单位的标识符,您必须添加限定符:   UnitName.Identifier。)

这是自引入单位的Turbo Pascal 4.0以来的预期行为。