调试我的代码,我注意到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;
Run Code Online (Sandbox Code Playgroud)
这条线
stringreplace(s,#32,'',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
应该
result:= stringreplace(s,#32,'',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
没有警告!
我认为它应该警告"返回值可能未定义".但事实并非如此.我在最后几天更改并重写了旧代码的一部分.我恐怕在我的申请中有这种错误.
我知道如何使用dupignore从TStringList中删除重复的字符串以用于排序的Tstringlist.
CallData := TStringList.Create;
CallData.Sorted := True;
Call.Duplicates := dupIgnore;
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,字符串不能排序.
当TStringList有数十万行时,使用FOR循环查找重复项非常慢(也使用indexOF()).
if OpenDialog1.Execute then
begin
Try
y := TStringList.create;
f := TStreamReader.create(OpenDialog1.FileName, TEncoding.UTF8, True);
while not f.EndOfStream do
begin
l := f.ReadLine;
X.Add(l);
end;
g := Tstreamwriter.create('d:\logX.txt', True, TEncoding.UTF8);
for I := 0 to X.count - 1 do
begin
if y.IndexOf(X[I]) = -1 then
y.Add(X[I]);
end;
for j := 0 to y.count - 1 do
g.WriteLine(y[j]);
Finally
f.free;
y.free;
g.free;
End;
end;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
我有一个十多年前开始的大项目.我使用了我创建的单元来定义许多函数,转换日期等等.编译这个项目我得到了数百个提示和警告,几乎所有这些都在这个单元文件中.我认为在去年的项目变更之后我只使用了一些这样的功能.然后最好从项目中排除此单元文件并在新单元中复制使用过的函数.我决定在USES部分注释掉这个单位名称并找出使用了哪些功能,但是它很难,因为项目有大约150个表格!此单元中还有数百个功能,我不能为每个功能使用"搜索用法"
任何方案?
此代码是我在我的应用程序中使用的第三方组件的一部分.我正在尝试解决与我的应用程序中的提示相关的所有可能问题.但我无法理解这一点.Delphi Compiler标记了这段代码的第一行,提示"分配给NewState的值从未使用过!我只是想了解情况
NewState := STATE_UNCHECKED; //Value assigned never used?Really?
while ( Node <> nil ) and ( Node.Parent <> nil ) do
begin
Node := Node.Parent.GetFirstChild;
CheckedCount := 0;
UnCheckedCount := 0;
while True do
begin
....
if ( Node.StateIndex = STATE_PARTCHECKED ) or
( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
begin
NewState := STATE_PARTCHECKED; ///assign value on condition
Break;
end;
if Node.GetNextSibling = nil then
begin
if CheckedCount > 0 then
NewState …Run Code Online (Sandbox Code Playgroud)