spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Пишем программу на Паскале-автокоде:
_program main;
_function f(i:integer):integer; _(f := i + 5 _);
_function g(i:integer):integer; _(f := i * 5 _);

_procedure p(i:integer; _function q:integer);
_( writeln(q(i)) _);

_(
 p(20, f); p(5, g);
_).


Она компилируется и печатает 25 25, как и ожидается.

А теперь берём и делаем тело программы пустым. Программа перестаёт компилироваться:

 СИСТЕМА ПУЛЬТ   23.01.82    
 ПАСКАЛЬ-АВТОКОД 9.(17.05.88) 
,К;А7:ВМ13=17СА77773,РА3=17ПИ13,17ПИ2=ВМ16,ВМ1=13ЗЧ2,17САА10=,15ПА31=ВИ15,СД42=13ЛС1,13ЗЧ1=15ПА12,ВИ15=17ЗЧ,17СА6=2ИА3,15ПА=ВИ15
,СМ15=СМ,17ЗЧ1=17СА77770,15ПА6=2ИА4,12ПА=16ПВВП7ОШИБКА
                                                                           06
                                                                           06
БЫЛИ ОШИБКИ В АВТОКОД ПРОГРАММЕ     


Потому что для вызова формального параметра-подпрограммы порождается код, содержащий вызов служебной процедуры, а код этой служебной процедуры формируется, только когда компилятор видит передачу подпрограммы в качестве фактического параметра.

А если не видит, то и не беда, если будет ошибка при компиляции: нечего держать в коде неиспользуемые куски.

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 12th, 2026 05:21 pm
Powered by Dreamwidth Studios