Можно ли отключить определенные подсказки Delphi?

В Delphi вы можете использовать директивы компилятора для отключения определенных предупреждений, таких как

{$WARN USE_BEFORE_DEF OFF}

Но когда я попытался сделать это с помощью особой подсказки, underscore_style_name которой я получил из файла справки, компилятор сказал, что не знает, что такое {$ HINT}. Так есть ли способ сделать это?


person Mason Wheeler    schedule 14.01.2009    source источник
comment
Почему вы хотите отключить подсказку? То, на что вам намекают, в любом случае удаляет компилятор в EXE, поэтому вы гарантированно не повлияете на выполнение программы.   -  person JosephStyons    schedule 14.01.2009
comment
Потому что мне не нравится создавать подсказки и предупреждения, и я вижу, читая код, что возможное условие, о котором он предупреждает меня в этой подсказке, в данном случае не применимо.   -  person Mason Wheeler    schedule 14.01.2009
comment
Я не согласен, подсказки в большинстве случаев верны. И у нас есть успешная стратегия 0 подсказок   -  person Toon Krijthe    schedule 14.01.2009
comment
Ага. В большинстве случаев они есть. Однако в этом случае компилятор не понимает, что повышение завершает процедуру.   -  person Mason Wheeler    schedule 15.01.2009
comment
Да, подсказки - твой друг. Не ненавидьте намеки.   -  person Jim McKeeth    schedule 15.01.2009
comment
Мне нужно увидеть этот код, который у вас есть, Мейсон. Компилятор действительно понимает, что повышение завершает процедуру во всех случаях, когда я ее использовал.   -  person Jim McKeeth    schedule 15.01.2009
comment
Согласитесь: подсказки и предупреждения нужно фиксировать в коде, а не игнорировать их.   -  person Nick Hodges    schedule 15.01.2009
comment
Я взглянул на код Мэйсона и показал ему, как исправить подсказку. Это было неопределенное условие else. Я никогда не встречал намеков или предупреждений, которые нельзя было бы исправить. Компилятор - мой друг.   -  person Jim McKeeth    schedule 15.01.2009
comment
@everybody_saying_not_to_turn_off_hints: Несомненно, есть предупреждения и подсказки компилятора, которые неверны. Обычно это в сложном коде, где происходит что-то вроде этого: если я инициализирую переменную, она сообщает мне, что присвоенное ей значение не будет использоваться, если я этого не сделаю, это говорит мне, что, возможно, она не была инициализирована. Есть и другие странности, но эта случается со мной чаще всего. (это Delphi 2007, возможно, это было исправлено в более поздних версиях)   -  person dummzeuch    schedule 10.08.2011


Ответы (4)


Никаких конкретных подсказок, но вы можете отключить их все.

{$HINTS OFF}
procedure MyProc;
var
  i : integer;
begin
  DoSomething;
end;
{$HINTS ON}
person Lars Truijens    schedule 14.01.2009
comment
Ага, вот чего я боялся. - person Mason Wheeler; 15.01.2009

Немного не по теме: вам следует позаботиться о подсказках и предупреждениях компилятора. Они предназначены не только для развлечения. Компилятор просто говорит: «Программа может работать иначе, чем вы думаете, потому что ВАШ исходный код неточен».

person DiGi    schedule 14.01.2009
comment
Да, подсказки - твой друг. Не ненавидьте намеки. - person Jim McKeeth; 15.01.2009
comment
Я взглянул на код Мэйсона и показал ему, как исправить подсказку. Это было неопределенное условие else. Я никогда не встречал намеков или предупреждений, которые нельзя было бы исправить. Компилятор - мой друг. - person Jim McKeeth; 15.01.2009
comment
Но ... есть случаи, когда это имеет смысл. Только один пример: вы мало что можете сделать с H2457 конкретно, кроме рефакторинга большого количества кода только для того, чтобы компилятор перестал ныть. Это был бы классический пример отключения только этого конкретного. Отсутствие встроенного частичного вызова - это еще не конец света, так что заткнись, компилятор! - person JensG; 13.05.2019

Чтобы не рисковать, можно сделать что-то вроде этого:

function TopazGetText(const _s: string): string;
begin
{$IFOPT <something>+}
{$DEFINE HINTS_WERE_ON}
{$HINTS OFF}
{$ELSE}
{$UNDEF HINTS_WERE_ON}
{$ENDIF}
  Result := dzDGetText(_s, TOPAZ_TRANSLATION_DOMAIN);
{$IFDEF HINTS_WERE_ON}
{$HINTS ON}
{$ENDIF}
end;

К сожалению, похоже, что нет директивы компилятора для проверки, отключены ли подсказки или нет, поэтому вы не можете этого сделать. (H + не для подсказок, а для длинных строк). Кроме того, HINTS OFF / ON не работает в рамках функции / процедуры.

Таким образом, вы в конечном итоге отключите и включите подсказки для всей функции:

{$HINTS OFF}
function TopazGetText(const _s: string): string;
begin
  Result := dzDGetText(_s, TOPAZ_TRANSLATION_DOMAIN);
end;
{$HINTS ON}

(Компилятор говорил мне, что он не может встроить dzDGetText, что меня не волнует в данном случае, и я не хочу видеть подсказку, потому что это остановит меня (и моих коллег), чтобы заботиться о важных подсказках .)

person dummzeuch    schedule 10.08.2011

Лучшее, что я могу придумать, - это окружить предмет подсказки условным определением и использовать такое же условное определение для кода, который может или не может понадобиться, как показано ниже:

Если у вас есть это:

procedure MyProc;
var
  i : integer;
begin
  DoSomething;
  //SomethingWith_i_IsCommentedOut;
end;

Вы получите: Подсказка: переменная "i" объявлена, но никогда не используется

Так что попробуйте вместо этого:

procedure MyProc;
  {$IFDEF USE_THE_I_PROCEDURE}
var
  i : integer;
  {$ENDIF}
begin
  DoSomething;
  {$IFDEF USE_THE_I_PROCEDURE}
  SomethingWith_i_IsCommentedOut;
  {$ENDIF}
end;

Теперь вы можете включить или отключить определение, и вы никогда не получите подсказки.

person JosephStyons    schedule 14.01.2009