Страница 1 из 1
Вопросы по компилятору
Добавлено: 21.07.2014 11:50:17
fpbt
Здравствуйте.
1. Почему для цикла for нельзя использовать переменную типа Int64/UInt64
Код: Выделить всё
...
Var
i: Int64;
...
Begin
...
for i := 1 to ...
...
End;
...
2. Есть ли способы вычислять "сложные" константы на этапе компиляции? (Например возведение в степень "**")
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
Отчего ж не так уж и нужная!
Весьма удобно присваивать константе не некую цифирь, а вполне себе осмысленное выражение.
Что б через год (или кто чужой) глянул, и всё понял.