Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизатор режет лишнее


Страницы:   1 2

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');


Ну и тд…


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо