相关疑难解决方法(0)

初始化字符串函数结果?

我刚刚调试了一个函数,它返回一个让我担心的字符串.我一直认为返回字符串的函数的隐式Result变量在函数调用开始时将为空,但以下(简化)代码产生了意外的结果:

function TMyObject.GenerateInfo: string;

        procedure AppendInfo(const AppendStr: string);
        begin
          if(Result > '') then
            Result := Result + #13;
          Result := Result + AppendStr;
        end;

begin
  if(ACondition) then
    AppendInfo('Some Text');
end;
Run Code Online (Sandbox Code Playgroud)

多次调用此函数导致:

"Some Text"
Run Code Online (Sandbox Code Playgroud)

第一次,

"Some Text"
"Some Text"
Run Code Online (Sandbox Code Playgroud)

第二次,

"Some Text"
"Some Text"
"Some Text"
Run Code Online (Sandbox Code Playgroud)

第三次等

要修复它,我必须初始化结果:

begin
  Result := '';
  if(ACondition) then
    AppendInfo('Some Text');
end;
Run Code Online (Sandbox Code Playgroud)

是否需要初始化字符串函数结果?为什么(技术上)?为什么编译器不会发出警告"W1035函数的返回值'xxx'可能是未定义的"字符串函数?我是否需要遍历所有代码以确保设置值,因为如果未明确设置结果,则期望函数中的空字符串不可靠?

我在一个新的测试应用程序中对此进行了测试,结果是一样的.

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  S: string;
begin
  for i := 1 to 5 do
    S := GenerateInfo;
  ShowMessage(S); // 5 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007 compiler-warnings

29
推荐指数
2
解决办法
4564
查看次数

标签 统计

compiler-warnings ×1

delphi ×1

delphi-2007 ×1