Как отключить предупреждение в Delphi о "возвращаемое значение ... может быть неопределенным"? - PullRequest
8 голосов
/ 14 сентября 2008

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

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

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

Result := '';

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

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

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

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

Ответы [ 6 ]

6 голосов
/ 14 сентября 2008

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

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

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}
3 голосов
/ 16 сентября 2008

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

1 голос
/ 25 мая 2010

В компиляторе 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.

1 голос
/ 16 сентября 2008

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

1 голос
/ 15 сентября 2008

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

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

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

1 голос
/ 14 сентября 2008

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

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

...