![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизатор режет лишнее
SpellCaster © (2007-08-01 18:09:00)Столкнулся со странным поведением оптимизатора кода.
Вот примерчик функции:
function stuff: boolean;
var s: string;
arr: array [0..2] of real;
i: Integer;
begin
Result:=False;
s:='a';
repeat
if (s='a') or (s='b') then
begin
if Result then
for i:=1 to 10 do
arr[i]:=0.1;
Exit; // выходим из цикла по-любому
end;
until False;
end;
почему-то Exit (пробовал и Break) выкидывается из финального кода, и соотв. получаем бесконечный цикл. Причем если вставить после until False; какое-либо действие - всё ОК.
Что-то я никак не догоню, в чем фикус.
icWasya (2007-08-02 09:51:00) [21]А кстати
arr: array [0.. 2] of real;
и
for i:=1 to 10do
arr[i]:=0.1;
Kolan (2007-08-02 09:13:00) [22]> Так удобней
Бред, ты просто не умеешь пользоваться циклами.
Попробуй GoTo удачи.
SpellCaster (2007-08-01 19:40:00) [23]Кстати, забыл уточнить - у меня Д7.
> [3] Плохиш © (01.08.07 18:48)
Какая версия Дельфей? Точно в результирующем коде Exit не убивается? Брейкпоинт на него ставится?
> [4] Kolan © (01.08.07 18:51)
Так удобней, если выйти из него надо из двух и более мест или же условие выхода может измениться к тому моменту, когда дело дойдет до until.
Kolan (2007-08-01 18:51:00) [24]Зачем вообще беск циклы нужны?
Плохиш (2007-08-01 18:48:00) [25]
> SpellCaster (01.08.07 18:42) [2]
> > [1] Kolan © (01.08.07 18:17)
>
> Это пример, просто я сократил его из очень большой процедуры,
> где куча всяких действий.
В сокращённой версии никаких бесконечных циклов нет, ищи ошибку в 17й строке...
SpellCaster (2007-08-01 18:42:00) [26]> [1] Kolan © (01.08.07 18:17)
Это пример, просто я сократил его из очень большой процедуры, где куча всяких действий.
Kolan (2007-08-01 18:17:00) [27]Дурацкий код. какойто
Вместо
if (s='a') or (s='b') then
begin
Exit;
end;
и:
until False;
Почему бы не написать:
repeat
until (s='a') or (s='b');
Ну и тд