Форум: "Прочее";
Текущий архив: 2017.02.19;
Скачать: [xml.tar.bz2];
ВнизЭто баг, фича, или я чего не понимаю? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c