Конференция "Прочее" » Это баг, фича, или я чего не понимаю?
 
  • Dimka Maslov © (21.03.16 11:38) [0]
    Вот такой код:


    type
     TProc = reference to procedure;

    procedure CallProc(Proc: TProc);
    begin
     Proc;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
     S1, S2, S3: String;

    begin
     S1 := 'S1';
     S2 := 'S2';
     S3 := 'S3';

     CallProc(procedure
     begin
       S2 := S1;
     end);

     ShowMessage('S1 = ' + S1 + ', S2 = ' + S2 + ', S3 = ' + S3);

    end;


    Работает всё правильно. Но если я войду в функцию отладчиком, то в окне Watches для S1 и S2 будет написано Undeclared identifier!
  • KSergey © (21.03.16 12:03) [1]
    А если оптимизацию выключить?
  • Dimka Maslov © (21.03.16 12:05) [2]
    Выключена
  • KSergey © (21.03.16 13:04) [3]
    Тогда фича дебагера.
    И поделом.
    (кстати, а как вы попадаете в функцию? не нашел места в коде, похожего на её вызов)
  • Dimka Maslov © (21.03.16 14:53) [4]
    Button1Click - попадание нажатием на кнопку с выставлением брейкпоинта.
  • KSergey © (21.03.16 15:51) [5]
    Ёлы-палы, я думал речь про этот кусочек:

     CallProc(procedure
     begin
       S2 := S1;
     end);

  • han_malign © (21.03.16 16:17) [6]

    > для S1 и S2 будет написано Undeclared identifier!

    - естеcтвенно, т.к. - в лучшем случае - в этом месте существуют только сылочные поля неявно созданного функтора. В худшем - undefined behavior...
  • Dimka Maslov © (21.03.16 19:24) [7]

    > KSergey ©   (21.03.16 15:51) [5]


    Так тут же и вызываем.


    > естеcтвенно,


    Не внутри CallProc, а внутри Button1Click же! Где всё ясно и понятно. При этом S3, который не упомянут в анонимной процедуре - нормально распознаётся отладчиком.
 
Конференция "Прочее" » Это баг, фича, или я чего не понимаю?
Есть новые Нет новых   [134434   +28][b:0][p:0.001]