![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цикл for, так нелюбимый компилятором [D7]
TUser © (2006-07-26 12:18:00)
procedure TForm1.Button1Click(Sender: TObject);
var i: longword;
begin
for i := 0 to high (longword) do
Label1.Caption := inttostr(i);
end;
пишет, что мол
[Hint] Unit1.pas(30): FOR or WHILE loop executes zero times - deleted
С чего вдруг zero times??
GrayFace (2006-07-28 05:27:00) [1]tesseract © (26.07.06 15:50) [14]
С первой по последнюю и это не ошибка.
Если ошибку задокументировать, то она превращается в фичу? :)
tesseract (2006-07-27 21:12:00) [2]> [46] Ketmar © (27.07.06 18:36)
Угу я не против, что они умные. Просто справки придёть прочесть раз в н-дцать поболее.
Ketmar (2006-07-27 18:36:00) [3]ну, положим, умные компиляторы Си вполне в состоянии отличить простой for со счётчиком и инкрементом от более сложного. %-)
TUser (2006-07-27 18:25:00) [4]В сях, вроде, не должно быть. Там for - это тот же while, только с другим синтаксисом. Изветсно, что начальное и конечное условие может быть любым, как и инкремент (т.е. - вообще произвольным оператором), а конечное значение счетчика не вычисляется заранее, т.к. никакого счетчика цикло там нет.
tesseract (2006-07-26 23:01:00) [5]> ещё интересно, есть-ли подобные кривые вещи в других языках,
> в C/C++,
там ещё сложнее.
default (2006-07-26 19:10:00) [6]или так...чёрт его знает...сейчас уже концы с концами нет смысла сводить..
default (2006-07-26 19:09:00) [7]+[41]
пардон, это я не так понял
ещё интересно, есть-ли подобные кривые вещи в других языках, в C/C++,
например
default (2006-07-26 18:23:00) [8]tesseract © (26.07.06 17:37) [32]
это понятно
но Вы ведь сначала указали причиной "явное указание компилятору работать с целым беззнаковым числом."
не надо переварачивать, нехорошо
begin...end (2006-07-26 18:13:00) [9]> default © (26.07.06 17:54) [38]
Так я ж и не спорю, что логика кривая. Кривая. Но документированная :)
default (2006-07-26 17:59:00) [10]почему бы компиляру, например, автоматически не вставлять код для переменной цикла в правой части for и избавить пользователя от подобной галиматьи, по-другому не назовёшь
default (2006-07-26 17:54:00) [11]begin...end © (26.07.06 17:50) [36]
хорошо, в справке есть, только вот убого это всё-равно...логика кривая, каждый раз на while, вводить переменную для for, ...всё это как-то...не очень
default (2006-07-26 17:52:00) [12]tesseract © (26.07.06 17:37) [32]
блин про другой пост подумал.....
если отключить, [24] работает
begin...end (2006-07-26 17:50:00) [13]> default © (26.07.06 17:48) [34]
Так, вроде бы, и не зашифровано ничего :)
"Это следствие ограничения компилятора, которое можно обойти, заменив цикл FOR на WHILE".
tesseract (2006-07-26 17:48:00) [14]
> от чего этого? с выключенной всё-равно не работает
У меня работает.
default (2006-07-26 17:48:00) [15]begin...end © (26.07.06 17:40) [33]
я уже видел, поздновато правда
"This results from a limitation in the compiler which you can work around by replacing the FOR loop with a WHILE loop."
можно расшифровать?
tesseract © (26.07.06 17:37) [32]
от чего этого? с выключенной всё-равно не работает
begin...end (2006-07-26 17:40:00) [16]> default © (26.07.06 16:02) [16]
> это написано в справке?
Это написано в справке.
tesseract (2006-07-26 17:37:00) [17]Это такая особенность компилятора.
Он смотрит на границы цикла, и видит, что у тебя правая граница -1, а левая - 0 . Т.е цикл не нужно выполнять.
default © (26.07.06 16:44) [24]
Ты в цикле используешь переменную, т.е. не константу -1, компилятор НЕ РАССЧИТЫВАЕТ значение границ цикла во время компиляции.
приведение будет выполняться позже - в рантайм.
Хочешь от этого избавиться - выключи оптимизацию в настройках проекта.
default (2006-07-26 17:21:00) [18]"явное указание компилятору работать с целым беззнаковым числом." (1)
и это смешно
procedure TForm1.Button1Click(Sender: TObject);
var i: longword;
begin
for i := 0 to LongWord($FFFFFFFF) do
Label1.Caption := inttostr(i);
end;
это также не работает, хотя тут есть (1)
так кто дурак? компилятор или мы?
tesseract (2006-07-26 17:15:00) [19]
> default © (26.07.06 16:59) [29]
Да нет я просто говорил про особенности работы процессора.
ссылки по этому вопросу.
default (2006-07-26 16:59:00) [20]tesseract © (26.07.06 16:53) [28]
я не понял Вашей позиции
какие-то невнятные ссылки на особенности реализации работы компилятора
можно точно сформулировать? очень интересно
а то такое ощущение, что Вы просто констатируете действия компилятора и на каждое такое действие говорите "Правильно. Ай да маладец!. Ай да умница!"