阿达:违反“No_Exception_Propagation”

时间:2017-01-27 21:43:36

标签: ada

在LED_Demo STM32示例项目中,我有以下代码(在GPS中编译):

export HADOOP_CLASSPATH=/opt/nz/lib/nzjdbc3.jar
sqoop import -D mapreduce.job.queuename=some_queue 
-D yarn.nodemanager.local-dirs=/tmp -D mapreduce.map.log.level=DEBUG 
--direct --connect jdbc:netezza://somehost:5480/SOME_DB --table SOME_TBL_1 
--username SOMEUSER --password xxxxxxx --target-dir /tmp/netezza/some_tbl_file 
--num-mappers 2 --verbose   

如果我将相同的代码修改为下面的代码,则无法编译。我收到错误“违反限制No_Exception_Propagation”。

procedure Does_Nothing is
begin
   Null;
exception
   when others =>
      Null;
end Does_Nothing;

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

这在文档中有解释。

https://gcc.gnu.org/onlinedocs/gnat_rm/No_005fException_005fPropagation.html

(强调补充)

  

5.1.28 No_Exception_Propagation

     

[GNAT]此限制保证永远不会出现异常   传播到外部子程序范围。唯一一个案例   当处理程序静态地处于相同状态时,可能引发异常   子程序,因此加注的效果基本上就像一个转到   声明。任何其他加注声明(隐式或显式)都将是   被认为是未处理的。允许使用异常处理程序,但可能不允许   包含异常发生标识符(例外选择)。在   此外,不允许使用包GNAT.Current_Exception,   

。不允许重新加注语句(不带操作数加注)

标识符Error违反了限制。