【发布时间】:2013-06-25 08:52:48
【问题描述】:
我的一位同事遇到了一个突然“改变值”的常量;
原来,它被重新声明了:
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 编译器不警告重复的常量名(这会很有帮助)?
我可以做些什么来启用警告(看起来不是那样)。
【问题讨论】:
-
它可以,但它没有,我想你应该在 EMB 论坛上询问为什么这没有引发危险信号......,这同样适用于函数、类等。跨度>
-
为什么?因为能够在不同的单元中声明具有相同名称的符号/类型并将其放在使用单元的范围内而不是最初声明符号/类型的单元中,这也是一个很好的资产。例如,没有它,Interposer 类是不可能的。
-
@MarjanVenema 是的,但是,有些人宁愿收到有关此案的通知,而不是寻找错误...
-
很好的例子,说明为什么要将事物保持在尽可能小的范围内。
-
原来,它被重新声明了。 从技术上讲,它是隐藏的。没有重新声明。有两个不同的声明,其中一个是隐藏的。