Конференция "Прочее" » Непонятный глюк в Delphi
 
  • Calligraff © (18.12.08 12:02) [0]
    Добрый день.
    после кропотливого изучения мною написанного, обнаружился совершенно не логичный и не понятный глюк.
    Есть функция:

    function SaveContactListToFile(CL: PRRECEIVE_CONTACT_LIST): Boolean;
    var
      k: Integer;
      DBF: file of CONTACT_LIST;
    begin
    AssignFile(DBF, UInf.Folder + CF_ContactLst);
    ReWrite(DBF);
    for k := 1 to 255 do begin
       CL.CONTACT_LIST[k].STATUS := STATE_OFFLINE;
       if (CL.CONTACT_LIST[k].ID > 0) and (CL.CONTACT_LIST[k].ID < $FFFF) then begin
          Write(DBF, CL.CONTACT_LIST[k]);
       end;
    end;
    CloseFile(DBF);
    end;



    но почему-то переменная k идет в цикле от 255 до 1 (т.е. в обратку, как например при downto), а так же игнорируется условие if (CL.CONTACT_LIST[k].ID > 0) and (CL.CONTACT_LIST[k].ID < $FFFF) then

    НО! если вставить строку, ShowMessage(IntToStr(k)) после for k := 1 to 255 do begin, то тогда все нормально!

    Не пойму как исправить?!
  • Сергей М. © (18.12.08 12:05) [1]
    Не надо ничего исправлять, это не глюк а фича оптимизатора.
  • Palladin © (18.12.08 13:20) [2]

    > Calligraff ©   (18.12.08 12:02) 

    интересно, зачем это надо исправить? мешает?
  • clickmaker © (18.12.08 13:34) [3]
    > это не глюк а фича оптимизатора

    так переменная k используется в цикле.
    я всегда думал, что он генерит loop с декрементом cx только если значение переменной в цикле не важно
  • Palladin © (18.12.08 13:37) [4]

    > так переменная k используется в цикле.

    если она используется, то такого быть не должно. автор где-то накосячил или обманывает.
  • Сергей М. © (18.12.08 13:43) [5]

    > clickmaker ©   (18.12.08 13:34) [3]


    Судя по тому, что у автора еще что-то там еще и "игнорируется", он видимо действительно где-то накосячил.
 
Конференция "Прочее" » Непонятный глюк в Delphi
Есть новые Нет новых   [134449   +17][b:0][p:0.001]