Как отключить предупреждение в Delphi о "возвращаемое значение... может быть неопределенным"?

У меня есть функция, которая дает мне следующее предупреждение:

[DCC Warning] filename.pas (6939): W1035 Возвращаемое значение функции 'function' может быть неопределенным

Функция, однако, чистая, маленькая и имеет известное ожидаемое возвращаемое значение. Первое утверждение в функции:

Result := '';

и нет локальной переменной или параметра с именем Result или.

Есть ли какая-либо прагматическая директива, которой я могу окружить этот метод, чтобы удалить это предупреждение? Это Delphi 2007.

К сожалению, справочная система в этой установке Delphi не работает, поэтому я не могу открыть справку для этого предупреждения прямо сейчас.

Кто-нибудь знает из головы, что я могу сделать?

6 ответов

Решение

Вы уверены, что сделали все, чтобы устранить предупреждение? Может быть, вы могли бы опубликовать код для нас, чтобы посмотреть?

Вы можете отключить предупреждение локально следующим образом:

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

Я не уверен, что хочу увидеть код для этого модуля... в конце концов, ошибка возникает в строке 6939 ... Может быть, превышена какая-то внутренняя таблица компилятора?

Существует такая ошибка в компиляторе Delphi, начиная, по крайней мере, с Delphi4: если сумма чисел параметров функции (включая Self и Result) и локальных переменных превышает 31, это вызывает проблемы. Например, он может записывать предупреждения W1035 (результат может быть неопределенным). Может пропустить неиспользуемые переменные. Просто попробуйте этот проект:

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

Это вызвало бы 31 подсказку, а не 40.

{$WARN NO_RETVAL OFF} - это то, что вы ищете, но обычно мне нравится выяснять, почему такие вещи случаются. Вы могли бы рассмотреть форматирование это по-другому и посмотреть, если это поможет.

У вас есть какие-нибудь команды, изменяющие поток, такие как Exit? Вы непосредственно поднимаете исключения и т. Д.? Есть ли в вашем случае case в конце значение else, которое устанавливает значение для Result?

Попробуйте попробовать настроить эти элементы и посмотреть, устраняет ли это предупреждение тоже.

Чтобы получить хороший ответ на этот вопрос, вам необходимо опубликовать код. Как правило, компилятор Delphi выдаст это предупреждение, если существует возможный путь кода, который может привести к тому, что Result не будет определен. Иногда этот путь кода менее чем очевиден.

Кажется, в Delphi есть какая-то ошибка. Прочтите этот пост, последний комментарий ссылается на другие сообщения об ошибках, которые могут быть теми, которые вы получили:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

Другие вопросы по тегам