阿达:Pragma List

时间:2017-01-30 04:46:32

标签: ada

有人可以告诉我Pragma List的作用(具体来说,什么是“汇编列表”)?我不理解LRM(2.8.25

中的描述
  

pragma List将其中一个标识符On或Off作为单个参数。在允许编译指示的任何地方都允许使用此编译指示。它指定继续或暂停编译列表,直到在同一编译中给出具有相反参数的List pragma。如果编译器正在生成列表,则始终列出编译指示本身。

2 个答案:

答案 0 :(得分:3)

编译器可以输出,即“列出”其输入以及它将生成的任何消息,例如错误消息。当您想要在上下文中清晰,详细地查看消息的内容时,这非常有用。 IDE通常会将消息链接到代码,但即使在今天,考虑到Jacob's提示计算历史记录,列表也可以指出。使用pragma List,程序员可以排除不需要列出的内容,如果他或她知道的话。或者,出于保密原因,排除不应列出的内容。

首先列出原始程序文本,然后列出pragma List

Compiling: /some/path/some_proc.adb
Source file time stamp: 2017-01-30 08:30:40
Compiled at: 2017-01-30 09:30:42

     1. procedure Some_Proc is
     2.     procedure Inner;
     3.     --  Does this and that...
     4.
     5.     pragma List (Off);
    10. pragma List (On);
    11.
    12. begin
    13.     Inner (42);
            |
        >>> too many arguments in call to "Inner"

    14. end Some_Proc;

 14 lines: 1 error
gprbuild: *** compilation phase failed

(如果您的编译器是GNAT,请在开关中指定-gnatl,列出并编译:)

procedure Some_Proc is
    procedure Inner;
    --  Does this and that...

    pragma List (Off);
    procedure Inner is
    begin
        null;
    end Inner;
    pragma List (On);

begin
    Inner (42);
end Some_Proc;

答案 1 :(得分:2)

您应该回想一下编译器是如何工作的并且在20世纪70年代后期使用过。我很确定其含义与编写时一样简单(用“输出”代替“正在生产”,以获得更现代的措辞)。

with Ada.Text_IO;
--  Now you see me.
pragma List (Off);
--  Now you do not.
private with Some_Secret_Package;
pragma List (On);

package Hello_World is
   ...