Страница 1 из 1

Вопросы по компилятору

СообщениеДобавлено: 21.07.2014 11:50:17
fpbt
Здравствуйте.

1. Почему для цикла for нельзя использовать переменную типа Int64/UInt64
Код: Выделить всё
...
Var
    i: Int64;
...
Begin
  ...
   for i := 1 to ...
  ...
End;
...

2. Есть ли способы вычислять "сложные" константы на этапе компиляции? (Например возведение в степень "**")
Код: Выделить всё
...
Const
    cTest1: Int64 = 7**12;
...


lazarus 1.2.4_win 32_fpc 2.6.4

Спасибо.

Re: Вопросы по компилятору

СообщениеДобавлено: 21.07.2014 12:33:21
Дож
1. Почему для цикла for нельзя использовать переменную типа Int64/UInt64

Можно в 64 битных системах, нельзя в 32 битных. Вероятно, связано с тем, что переменная простого цикла for должна умещаться в регистр. Можно попытаться сделать как-то цикл через for-in:
Код: Выделить всё
{$MODE OBJFPC}
type
  D = 0..10;

var
  I: Int64;

begin
  for I in D do
    Writeln(I);
end.


2. Есть ли способы вычислять "сложные" константы на этапе компиляции? (Например возведение в степень "**")

Средствами языка — нет, только препроцессорами.

Re: Вопросы по компилятору

СообщениеДобавлено: 08.08.2014 11:01:50
Tango
Можно вычислять сложные константы, была тут такая тема, и там показали что вычисляются.

Re: Вопросы по компилятору

СообщениеДобавлено: 10.08.2014 14:21:36
Дож
Можно вычислять сложные константы, была тут такая тема, и там показали что вычисляются.

Тему в студию.

Re: Вопросы по компилятору

СообщениеДобавлено: 10.08.2014 15:17:13
Sergei I. Gorelkin
В версии 2.7.1 на этапе компиляции вычисляются все состоящие из констант простые выражения, а также встроенные функции (sin,cos,exp,ln). Возведение в степень оператором ** тоже вычисляется. Кроме того, вычисляются и inline функции, тело которых является одиночным выражением:

Код: Выделить всё
function packFloat64( zSign: flag; zExp: int16; zSig : bits64): float64;inline;
begin
    result := float64(( ( bits64(zSign) ) shl 63 ) + ( ( bits64(zExp) ) shl 52 ) + zSig);
end;

begin
  x:=packfloat64(0,0,0);   // скомпилируется как "x:=0"
end.

Re: Вопросы по компилятору

СообщениеДобавлено: 10.08.2014 17:55:22
hinst
вот это прогресс, но имхо фича не то чтобы очень нужная, умвр и так

Re: Вопросы по компилятору

СообщениеДобавлено: 11.08.2014 06:42:09
sign
Отчего ж не так уж и нужная!
Весьма удобно присваивать константе не некую цифирь, а вполне себе осмысленное выражение.
Что б через год (или кто чужой) глянул, и всё понял.