Я следующий код, который сочетает в себе два байта в массив байтов:Ada: Нарушение «No_Exception_Propagation» - Часть 2
pragma Restrictions (No_Exception_Propagation);
with Interfaces; use Interfaces;
procedure No_Propagation is
type Byte is new Unsigned_8;
type Byte_Array is array (Natural range <>) of Byte;
function Concat (Input_1 : Byte;
Input_2 : Byte)
return Byte_Array
is
Null_Array : Byte_Array (1 .. 0);
begin
declare
Output : constant Byte_Array := Byte_Array'(Input_1 & Input_2);
begin
return Output;
exception
when Constraint_Error =>
return Null_Array;
end;
end Concat;
A, B : Byte;
begin
A := 5;
B := 0;
declare
C : Byte_Array := Concat(A, B);
begin
null;
end;
end No_Propagation;
Когда я компилирую это с:
gnatmake -gnatw.e no_propagation.adb
Я получаю следующее предупреждение:
no_propagation.adb:16:66: warning: pragma Restrictions (No_Exception_Propagation) in effect
no_propagation.adb:16:66: warning: "Constraint_Error" may result in unhandled exception
Q1. Почему я получаю предупреждение о том, что «Constraint_Error» может привести к необработанному исключению, если у меня есть обработчик исключений в блоке declare в функции Concat?
Q2. Как вставить два байта вместе в Byte_Array, создать ошибку Constraint?
Обработчик исключений защищает все после 'begin' - но инициализация перед ним ... Я думаю, вам нужен обработчик перед процедурой' End'. –