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

StackOverflow https://stackoverflow.com/questions/61418

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Result := '';

и там нет вызываемой локальной переменной или параметра Result либо.

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

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

Кто-нибудь знает, на что я способен?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

Такая ошибка есть в компиляторе 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top