How to stop execution in my program

后端 未结 2 1514
有刺的猬
有刺的猬 2020-12-21 02:10

Without copy-pasting my code here, how can I stop my ADA program from executing anymore lines of code during run-time if it calculates a certain value to \'X\'?

some

相关标签:
2条回答
  • 2020-12-21 02:16

    There isn’t any specific syntax for this.

    If you are in the main procedure, a simple return will do.

    An Ada83-compatible answer is here on SO.

    Both those are OK so long as you don’t have any tasks.

    There’s an Ada95 Rosetta Code solution, which will work whether you have tasks or not:

    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;
    

    and a GNAT-specific solution, also OK with tasks:

    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;
    
    0 讨论(0)
  • 2020-12-21 02:16
     if variable_name >1 then
        raise PROGRAM_ERROR with "Aborted because ...";
     end if;
    

    will do what you ask. Whether that's what you want is another matter, you haven't given us enough context to guess at that.

    The "abort" statement might also be usable, but its normal role is terminating tasks within a multi-tasking program.

    Raising an exception is probably easiest, and if you don't like the standard ones, you can always declare your own. With an exception you can also do any tidying up (such as closing files if you need to) in your own exception handler. See the Wikibook for more details.

    0 讨论(0)
提交回复
热议问题