在LED_Demo STM32示例项目中,我有以下代码(在GPS中编译):
procedure Does_Nothing is
begin
Null;
exception
when others =>
Null;
end Does_Nothing;如果我将相同的代码修改为下面的代码,它将不会编译。我得到了“违反限制No_Exception_Propagation”的错误。
procedure Does_Nothing is
begin
Null;
exception
when Error: others =>
UART.Put(Exception_Information(Error));
end Does_Nothing;有人能解释一下为什么会这样吗?
发布于 2017-01-27 21:51:26
这一点在文件中作了解释。
(强调后加)
5.1.28 No_Exception_Propagation 这个限制保证异常永远不会传播到外部子程序范围。唯一可能引发异常的情况是,当处理程序静态地位于同一个子程序中时,因此引发的效果实质上类似于goto语句。任何其他raise语句(隐式或显式)都将被视为未处理。允许异常处理程序,,但可能不包含异常发生标识符(异常选择)。此外,不允许使用包
GNAT.Current_Exception,也不允许使用reraise语句(不使用操作数引发)。
标识符Error违反了限制。
https://stackoverflow.com/questions/41903494
复制相似问题