加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:05:14 所属栏目:大数据 来源:网络整理
导读:调试我的代码,我注意到Delphi编译器(柏林10.1)没有警告没有返回值的函数.这是正常的吗? 一个简单的例子: function f(s:string):String;begin stringreplace(s,#32,'',[rfReplaceAll]);end;procedure TForm1.FormCreate(Sender: TObject);begin showmessage
调试我的代码,我注意到Delphi编译器(柏林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,[rfReplaceAll]);

应该

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

没有警告!

我认为它应该警告“返回值可能未定义”.但事实并非如此.
我在最后几天更改并重写了旧代码的一部分.我恐怕在我的申请中有这种错误.

解决方法

这是一个编译器缺陷.托管类型返回值实现为var参数.因此,一旦编译器将函数转换为具有返回值的额外var参数的过程,它就会看到它假定的var参数由调用者初始化.这是问题的根本原因.我不是在贬低它,这是一个明显的缺陷,也是一个糟糕的缺陷.我只是给出了一些关于如何发生这种情况的背景知识.

你可以做很多事情.也许你能做的最好的事情就是确保你的代码具有强大的单元测试覆盖率.还可以部署像FixInsight这样的静态分析工具,以帮助根除代码中的此类错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读