2017-01-30 48 views
0

任何人都可以告訴我Pragma List做了什麼(具體來說,什麼是「列表編譯」)?我不明白LRM的描述(2.8.25Ada:Pragma列表

一個pragma List將其中一個標識符On或Off作爲單個參數。該編譯指示允許在任何地方使用編譯指示。它指定編譯列表將被繼續或暫停,直到在相同編譯中給出具有相反參數的List編譯指示。如果編譯器正在生成列表,則編譯器本身總是被列出。

回答

2

編譯器可以輸出(即「列出」)其輸入以及它將生成的任何消息,例如錯誤消息。當您想要在上下文中清楚詳細地顯示消息的內容時,這非常有用。 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; 
2

您應該回想一下編譯器是如何工作並在1970年代後期使用的。我很確定它的意義是如此簡單(用「輸出」替代「正在生產」,以獲得更現代的措辭)。

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 
    ...