Ошибка в Паскале
Jun. 8th, 2021 01:30 amПрограмма
Константа получается целого типа, её можно присвоить целой переменной.
Аналогичная программа
Константа получается "никакого" типа, с ней ничего нельзя сделать.
В то же время этот же компилятор на С++ выдаёт
А всё дело в разнице между константой 0 и значением указателя NIL, которая на БЭСМ-6 в Паскале есть, а в С++ - нет.
Ну и в том, что недосформированный объект, описывающий константу, зачем-то вставляется в таблицу символов до того, как проанализирована правая часть определения константы (это ошибка Пирина, у Вирта правильно).
_program test; _const foo=foo; _begin writeln(foo) _end.на Паскаль-автокоде компилируется и печатает 0, который берётся из адреса 0, а не из константного пула, как обычно.
Константа получается целого типа, её можно присвоить целой переменной.
Аналогичная программа
program test(output); const foo = foo; begin writeln(foo) end.на Паскаль-мониторе не компилируется:
00001 1 0 PROGRAM TEST(OUTPUT);
00001 2 1 CONST FOO=FOO;
******34 TИП HE COOTBETCT TИПY ЭЛEMEHTA ФAЙЛA
00023 3 0 BEGIN WRITELN(FOO) END.
***** 0Константа получается "никакого" типа, с ней ничего нельзя сделать.
В то же время этот же компилятор на С++ выдаёт
00001 1 0 program test(output);
Error 6: Missing constant
Error 12: Bad symbol
00001 2 1 const foo=foo;
^^^^^ 01
00015 3 0 begin writeln(foo) end.А всё дело в разнице между константой 0 и значением указателя NIL, которая на БЭСМ-6 в Паскале есть, а в С++ - нет.
Ну и в том, что недосформированный объект, описывающий константу, зачем-то вставляется в таблицу символов до того, как проанализирована правая часть определения константы (это ошибка Пирина, у Вирта правильно).
no subject
Date: 2021-06-08 10:53 pm (UTC)no subject
Date: 2021-06-08 11:47 pm (UTC)no subject
Date: 2021-06-09 03:21 am (UTC)