任何人都可以告訴我Pragma List做了什麼(具體來說,什麼是「列表編譯」)?我不明白LRM的描述(2.8.25)Ada:Pragma列表
一個pragma List將其中一個標識符On或Off作爲單個參數。該編譯指示允許在任何地方使用編譯指示。它指定編譯列表將被繼續或暫停,直到在相同編譯中給出具有相反參數的List編譯指示。如果編譯器正在生成列表,則編譯器本身總是被列出。
任何人都可以告訴我Pragma List做了什麼(具體來說,什麼是「列表編譯」)?我不明白LRM的描述(2.8.25)Ada:Pragma列表
一個pragma List將其中一個標識符On或Off作爲單個參數。該編譯指示允許在任何地方使用編譯指示。它指定編譯列表將被繼續或暫停,直到在相同編譯中給出具有相反參數的List編譯指示。如果編譯器正在生成列表,則編譯器本身總是被列出。
編譯器可以輸出(即「列出」)其輸入以及它將生成的任何消息,例如錯誤消息。當您想要在上下文中清楚詳細地顯示消息的內容時,這非常有用。 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;
您應該回想一下編譯器是如何工作並在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
...