Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.02.19;
Скачать: CL | DM;

Вниз

Это баг, фича, или я чего не понимаю?   Найти похожие ветки 

 
Dimka Maslov ©   (2016-03-21 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 ©   (2016-03-21 12:03) [1]

А если оптимизацию выключить?


 
Dimka Maslov ©   (2016-03-21 12:05) [2]

Выключена


 
KSergey ©   (2016-03-21 13:04) [3]

Тогда фича дебагера.
И поделом.
(кстати, а как вы попадаете в функцию? не нашел места в коде, похожего на её вызов)


 
Dimka Maslov ©   (2016-03-21 14:53) [4]

Button1Click - попадание нажатием на кнопку с выставлением брейкпоинта.


 
KSergey ©   (2016-03-21 15:51) [5]

Ёлы-палы, я думал речь про этот кусочек:

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


 
han_malign ©   (2016-03-21 16:17) [6]


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

- естеcтвенно, т.к. - в лучшем случае - в этом месте существуют только сылочные поля неявно созданного функтора. В худшем - undefined behavior...


 
Dimka Maslov ©   (2016-03-21 19:24) [7]


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


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


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


Не внутри CallProc, а внутри Button1Click же! Где всё ясно и понятно. При этом S3, который не упомянут в анонимной процедуре - нормально распознаётся отладчиком.



Страницы: 1 вся ветка

Текущий архив: 2017.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.004 c
15-1458549533
Dimka Maslov
2016-03-21 11:38
2017.02.19
Это баг, фича, или я чего не понимаю?


15-1458548516
эндсоувот
2016-03-21 11:21
2017.02.19
высота солнца


3-1312306847
Артем
2011-08-02 21:40
2017.02.19
Удаление TADOConnection в потоке


4-1280652219
mc.fly
2010-08-01 12:43
2017.02.19
Как внедрить DLL в процесс передав ей параметры?(для взаимосвязи)


2-1432894313
СтасТ
2015-05-29 13:11
2017.02.19
Ip компьютеров через роутер