2017-01-30 2 views
0

Может ли кто-нибудь сказать мне, что такое список Pragma (в частности, что такое «», составление списка »)? Я не понимаю, описание от LRM (2.8.25)Ada: Pragma 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 
    ... 
Смежные вопросы