Ada 如何在我的程序中停止执行

Ada 如何在我的程序中停止执行,ada,ada2012,Ada,Ada2012,如果不在这里复制粘贴代码,如果ADA程序将某个值计算为“X”,如何在运行时停止执行更多的代码行 比如: variable_name := variable_name +4; if variable_name >1 then // END program here and dont execute any lines under this one end if 我对编程并不陌生,但对ADA来说是个新手,所以找到正确的语法是一件痛苦的事情。有什么帮助吗 if variable_na

如果不在这里复制粘贴代码,如果ADA程序将某个值计算为“X”,如何在运行时停止执行更多的代码行

比如:

 variable_name := variable_name +4;
 if variable_name >1 then
 // END program here and dont execute any lines under this one
 end if
我对编程并不陌生,但对ADA来说是个新手,所以找到正确的语法是一件痛苦的事情。有什么帮助吗

 if variable_name >1 then
    raise PROGRAM_ERROR with "Aborted because ...";
 end if;
我会照你说的做。这是否是你想要的是另一回事,你没有给我们足够的上下文来猜测

“abort”语句也可以使用,但它的正常作用是终止多任务程序中的任务


引发异常可能是最简单的,如果您不喜欢标准异常,您可以随时声明自己的异常。对于异常,您还可以在自己的异常处理程序中进行任何整理(如需要关闭文件)。有关详细信息,请参阅。

没有任何特定的语法

如果您在主过程中,一个简单的
返回即可

Ada83兼容的答案是

只要你没有任何任务,这两个都可以

有一个Ada95 Rosetta代码解决方案,无论您是否有任务,它都会起作用:

with Ada.Task_Identification;  use Ada.Task_Identification;

procedure Main is
   -- Create as many task objects as your program needs
begin
   -- whatever logic is required in your Main procedure
   if some_condition then
      Abort_Task (Current_Task);
   end if;
end Main;
和特定于蚊虫的解决方案,也适用于以下任务:

with Ada.Text_IO; use Ada.Text_IO;
with GNAT.OS_Lib;
procedure Stopping is
   procedure P is
   begin
      GNAT.OS_Lib.OS_Exit (0);
   end P;
begin
   Put_Line ("starting");
   P;
   Put_Line ("shouldn't have got here");
end Stopping;

为什么有人想开始执行ADA程序?“then return”怎么样?我相信这不是“abort”语句:您的示例源文本没有编译和运行。请告诉我们您至少做了那么多的努力。@GratusD.
abort
语句与此无关。通常,停止程序是通过退出循环来完成的(或者通过编写一个
while
循环,在完成时停止,或者通过使用
exit
语句退出循环)。也可以通过从包含主循环的过程返回
来完成。如果你的计算结果达到X是正常的,那么你想做其中一个——请不要试图从你的程序中找到“紧急出口”的方法,这将是一个可怕的实践。如果你真的需要一个紧急出口,请提供更多的细节,以便我能给出一个合适的答案。一个比我更好的答案。布赖恩你的工作为我很好,但感谢两个答案。干杯