gpt4 book ai didi

lazarus - 为什么在不同的单元中调用具有相同签名的函数不会导致编译器错误?

转载 作者:行者123 更新时间:2023-12-03 15:04:04 26 4
gpt4 key购买 nike

为什么这段代码不会导致编译器错误?我预计会出现错误,例如“对“CallMe”的调用不明确”。这是编译器或语言中的错误吗?这可以通过使用单元名称和函数调用前面的点来解决,但这不能保护用户代码和库代码免受名称冲突。您认为您的代码做了一些事情,但它做了其他事情,这是不好的。

uses
Unit2, Unit3;

{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(CallMe(5)));
end;

unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function CallMe(A: Integer) : Integer;
implementation
function CallMe(A: Integer) : Integer;
begin
Result := A * 2;
end;
end.

unit Unit3;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function CallMe(A: Integer) : Integer;
implementation
function CallMe(A: Integer) : Integer;
begin
Result := A * -1;
end;
end.

最佳答案

来自documentation :

If two units declare a variable, constant, type, procedure, or function with the same name, the compiler uses the one from the unit listed last in the uses clause. (To access the identifier from the other unit, you would have to add a qualifier: UnitName.Identifier.)

关于lazarus - 为什么在不同的单元中调用具有相同签名的函数不会导致编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com