Значение константы из функции

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Значение константы из функции

Сообщение Vadim » 30.11.2018 10:50:47

В модуле мне нужно определить значения констант из функции. Причём функция определена в этом же модуле.
Код: Выделить всё
function f(p1,p2: integer): integer;

Const
  const1 = f(1,2);
  const = f(3,4);


Как это правильно сделать? В таком виде компилятор выдаёт ошибку "Illegal expression".
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Значение константы из функции

Сообщение serbod » 30.11.2018 11:13:11

Константы назначаются при компиляции. Можно использовать только функции препроцессора (макросы)
https://www.freepascal.org/docs-html/prog/progse5.html

Добавлено спустя 5 минут 32 секунды:
Однако, можно разрешить запись в констаты директивой {$J} или {$WriteableConst}
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: Значение константы из функции

Сообщение Vadim » 30.11.2018 11:31:51

Понятно. Попробую тогда с макросами поиграть...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Значение константы из функции

Сообщение iskander » 30.11.2018 12:53:34

Типизированные константы вполне себе допускают присваивание, если {$WRITEABLECONST ON}.
Код: Выделить всё
const
  MyInt: Integer = 0;
  .....................
{$PUSH}{$J+}
  MyInt := -1;
{$POP}

должно работать.
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: Значение константы из функции

Сообщение Vadim » 30.11.2018 12:58:57

iskander писал(а):Типизированные константы вполне себе допускают присваивание

Это в процессе работы программы. А там мне как раз присваивать константам ничего не надо, только при их объявлении нужно получить определённое вычисляемое значение, т.к. оно основано на типизированных значениях из другого модуля и те другие вполне могут поменяться. Поэтому лучше использовать не сами значения, а их имена в системе.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Значение константы из функции

Сообщение Vapaamies » 03.12.2018 00:16:39

Vadim писал(а):
Код: Выделить всё
function f(p1,p2: integer): integer;

Const
  const1 = f(1,2);
  const = f(3,4);


Как это правильно сделать? В таком виде компилятор выдаёт ошибку "Illegal expression".

Во втором объявлении ключевое слово const используется в качестве идентификатора. Взял ваш пример в качестве постановки по двухстадийной компиляции в Халва-Паскале, второе объявление исправил на const2.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Значение константы из функции

Сообщение Vadim » 03.12.2018 04:04:18

Vapaamies писал(а):Во втором объявлении ключевое слово const используется в качестве идентификатора.

Это была непропечатка клавы... ;-) На самом деле там должно быть как раз "const2".
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru