我看到一些delphi函数没有给result赋值,但是为什么函数运行完还有返回值????
真想不明白怎么回事,又能解释一下的嘛?

解决方案 »

  1.   

    不管有没有给Result赋过值,函数都有返回值的。区别在于:
    如果给Result赋过值,则返回值为该值。
    如果没有给Result赋过值,则返回值是个不确定的值。(Delphi帮助中的原文如下: If the function exits without assigning a value to Result or the function name, then the function's return value is undefined.)
      

  2.   

    贴出来看看。函数里有 var/out
      

  3.   

    因为Delphi编译以后返回值是通过EAX寄存器传递的,所以如果你没有返回值,那么返回值就是你最后一次用过的EAX里的值
      

  4.   

    result有默认值的,
    int类型的为0,string类型的为‘’,tobject类型的为nil
      

  5.   


    这个观点有问题,看编译后的汇编代码就会发现Delphi编译器是没有给函数返回值赋默认值的。用下面的代码测试一下就清楚了:function A(i: Integer): Integer;
    begin
      if i > 0 then Result := i;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage (IntToStr(A(0)));
      ShowMessage (IntToStr(A(0)));
    end;
      

  6.   

    不要乱讲害人。去看Delphi编译出来的汇编代码如果真像你说的这样,VCL源码里也不用写 Result := 0; 之类的初始化语句了。再说给个默认值一点好处也没有,只会浪费汇编程序,Delphi的开发工程师怎么会这么笨。