【问题标题】:Returning a value in Pascal在 Pascal 中返回一个值
【发布时间】:2012-03-27 08:27:13
【问题描述】:

对于在 Pascal 中返回值的函数,使用赋值 FunctionName := SomeVal;。我认为它不会像 C 中的 return 那样在那个确切的位置停止函数执行。帕斯卡中有没有类似于 C return 的东西? (我使用的是 FreePascal 编译器)

【问题讨论】:

  • 仅供参考:FunctionName := SomeVal; 语法已过时;当前语法为Result := SomeVal;,其中Result 是与函数声明匹配的正确数据类型的自动可用变量。例如:function Test: Integer; begin Result := 10; end;.
  • Ken White:在 Free Pascal 中,结果是 afaik 仅在 Delphi 和类似 delphi 的方言中支持。 (-S2/-Sd)。其他pascal 也没有采用以Delphi 为中心的结果,或者仅用于兼容模式。最后的 Pascal 标准仍然记录了这一点

标签: pascal freepascal


【解决方案1】:

在规范帕斯卡(没有关键字退出)中,您可以通过 goto 模拟返回:

   function Foo (Value : integer) : boolean;
   label return;
   begin      
      if Value < 0 then
      begin
          Foo := false;
          goto return;
      end;
      Calc();
      Foo := true;
   return:
   end; 

【讨论】:

    【解决方案2】:

    每个程序结束的返回码存储在 EAX 寄存器中。因此,您可以在 Pascal 上使用 Assembly inline 返回任何您想结束程序运行的地方!

     asm
     mov eax,%ERROLEVEL%
     end; 
    

    【讨论】:

    • 这就是你编译器在编译后要做的事情!后跟一个 RET
    【解决方案3】:

    我认为你可以使用函数名本身,"result",或Exit(),但我只使用了result identifier,所以不知道其他是否适合你:

    function Foo(a, b: Integer): Integer;
    begin
        result := a + b;
    end;
    

    希望对你有所帮助^^

    【讨论】:

      【解决方案4】:

      您可以使用退出程序。

      function Foo (Value : integer) : Integer;
      begin      
        Exit(Value*2);
        DoSomethingElse();   // This will never execute
      end; 
      

      【讨论】:

      • +1,从未听说过这种语法!然而,在Exit 之后放置一行并注释Exit 之后的行将不会被执行可能会更好。
      • +1 这是一个很好的语法,有助于避免可怕的 Result + Exit 组合。基本上相当于“return”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多