Как обрабатывать ложные сообщения «Значение H2077, присвоенное«% s никогда не использованным »сообщениям, не подавляя все подсказки? - PullRequest
0 голосов
/ 08 апреля 2020

Delphi (10,3 Rio) выдает ложные предупреждения H2077 для кода, подобного следующему:

x := TFoo.Create;
y := nil;
try
   y := function_that_can_throw;
   // use x and y
finally
   x.Free;
   y.Free;
end;

Примечание: предупреждение все равно будет нежелательным, даже если компилятор может доказать, что функция не может выдать, так как AFAIK существует невозможно заблокировать функцию, не выдавая ее, объявив ее nothrow, как в других языках и , чтобы установить свойство nothrow на сайте вызова. Следовательно, код должен быть написан в предположении, что функция может выдавать.

Я хотел бы подавить бесполезную / ошибочную подсказку, но, очевидно, невозможно специально подавить подсказку H2077, только все подсказки или их нет. Я хотел бы оставить включенные подсказки, если это возможно, поэтому мне интересно, есть ли другой вариант для подавления H2077 в этой ситуации.

Кроме того, я хотел бы избежать необходимости кодировать лишнюю секунду try / finally frame, поскольку он загромождает исходный код и создает ненужный объектный код. Самая простая и наиболее очевидная альтернатива - вызов пустой фиктивной процедуры, такой как pretend_to_use(y), которая принимает параметр TObject и ничего не делает с ним - создаст ненужную глобальную зависимость и, скорее всего, также вызовы лишних функций. Поэтому я хотел бы получить ваш совет по лучшему решению ...

РЕДАКТИРОВАТЬ : оказывается, что Андреас имеет точку, а приведенный выше фрагмент не создает ложное предупреждение (специальное кодирование в компилятор?). Вот исправленный фрагмент кода, который вызывает нежелательную подсказку:

TIdStack.IncUsage;
y := nil;
try
   y := function_that_can_throw;
   // use y and the Indy stack
finally
   TIdStack.DecUsage;
   y.Free;
end;

В стеке Indy есть кое-что, над чем я сейчас работаю, но вход / выход из критических секций, возможно, был бы более распространенной ситуацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...