09 сентября 2025

Директива "noreturn" для объявления процедур в Delphi 13 Florence

В компилятор Delphi 13 Florence добавлена директива "noreturn". "noreturn" - это атрибут объявления процедуры, который указывает, что вызов процедуры 100% вызовет исключение, а не завершит обычное выполнение. Это позволит компилятору выполнить оптимизацию путем исключения лишнего кода и пропустить предупреждение о неопределенных результатах в функциях.

Пример использования:

procedure RaiseTestException; noreturn; // новая директива noreturn
begin 
  raise Exception.Create('Test2'); 
end; 

function Test(N: Integer): Integer; 
begin 
  if N = 0 then 
    Result := 0
  else begin
    case N of
      1: Result := 1; 
      2: Result := 2;
      else
        // Result := 0; // раскомментировать, чтобы скрыть предупреждение
        RaiseTestException;
      end;
  end;
end; // Warning "W1035 Return value of function 'Test' might be undefined"

Используя атрибут "noreturn", вы даете компилятору обещание: вызывающая функция никогда не вернет управление. Нарушение этого обещания (т.е. возврат из вызова) может иметь негативные последствия. Например, компилятор удалит код, следующий после вызова с noreturn. Эта новая директива может использоваться для устранения предупреждений "W1035 Return value of function '%s' might be undefined" при возникновении исключений.

1 комментарий:

  1. Вот уж странная штука. Суть-то понятна, но вводить ради этого специальную конструкцию? Неожиданно. Такое впечатление, что это реверанс в сторону любителей Exception-Driven Development.

    ОтветитьУдалить