gpt4 book ai didi

Delphi 编译器不会对此代码发出警告

转载 作者:行者123 更新时间:2023-12-03 14:47:32 24 4
gpt4 key购买 nike

调试我的代码时,我注意到 Delphi 编译器 (Berlin 10.1) 不会对没有返回值的函数发出警告。这是正常的吗?

一个简单的例子:

function f(s:string):String;
begin
stringreplace(s,#32,'',[rfReplaceAll]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage(F('te st'));
end;

这一行

 stringreplace(s,#32,'',[rfReplaceAll]);

应该是

result:= stringreplace(s,#32,'',[rfReplaceAll]);

没有警告!

我认为它应该警告“返回值可能未定义”。但事实并非如此。最近几天我更改并重写了部分旧代码。我担心我的申请中存在此类错误。

最佳答案

这是一个编译器缺陷。托管类型返回值作为 var 参数实现。因此,一旦编译器将函数转换为带有额外 var 参数作为返回值的过程,它就会看到一个 var 参数,并假定该参数是由调用者初始化的。这就是问题的根本原因。但我并不为此辩解,这是一个明显的缺陷,而且是一个糟糕的缺陷。我只是提供一些关于这是如何发生的背景知识。

对此您无能为力。也许您能做的最好的事情就是确保您的代码具有强大的单元测试覆盖率。还可以部署 FixInsight 等静态分析工具来帮助根除代码中的此类错误。

关于Delphi 编译器不会对此代码发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606076/

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