我的一位同事撞到了一个突然"改变价值"的常数;
原来,它被重新宣布:
unit Unit1;
interface
const
MyConstant = 1;
implementation
end.
Run Code Online (Sandbox Code Playgroud)
-
unit Unit2;
interface
const
MyConstant = 2;
implementation
end.
Run Code Online (Sandbox Code Playgroud)
-
Uses Unit1, Unit2;
// Uses Unit2, Unit1;
procedure TFrmRedefineConstant.FormShow(Sender: TObject);
begin
ShowMessage('MyConstant: ' + IntToStr(MyConstant));
end;
Run Code Online (Sandbox Code Playgroud)
这表明2.如果您在Uses语句中交换单位订单,则会显示1.
很好,但为什么Delphi编译器没有警告重复的常量名称(这会非常有帮助)?
我能做些什么来启用警告(看起来不那么).
因为Delphi记录了范围规则.来自语言指南:
单位出现在uses子句中的顺序决定了它们的初始化顺序,并影响编译器定位标识符的方式.如果两个单元声明了具有相同名称的变量,常量,类型,过程或函数,则编译器将使用uses子句中最后列出的单元中的一个.(要从其他单元访问标识符,您必须添加限定符:UnitName.Identifier.)
这是Turbo Pascal 4.0引入单位后的预期行为.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |