Ada的子程序合同

时间:2014-03-25 13:40:06

标签: ada

我正在阅读一篇关于Ada编程更具体的文档,Ada for C ++ Java开发人员,或者我遇到麻烦并理解并能够使用文档中给出的一些示例,其中一个是关于数据的预处理

但是,当我编译该程序时,我只得到了+ Inf * * 消息

with Ada.Text_IO;
use Ada.Text_IO;

procedure main is

   function Divisao(Left, Right : Float) return Float
   with Pre => Right /= 0.0,
     Post => Divisao'Result * Right < left + 0.0001
     and then Divisao'Result * Right > Left - 0.0001 
   is
   begin
      return Left/Right;
   end Divisao;

begin
   Put_Line(Float'Image(Divisao(10.3,0.0)));
end main;

PS:在文档中,只有函数声明:

function Divisao(Left, Right : Float) return Float
   with Pre => Right /= 0.0,
     Post => Divisao'Result * Right < left + 0.0001
     and then Divisao'Result * Right > Left - 0.0001;

这个系统预处理器不应该指出这个错误吗?

1 个答案:

答案 0 :(得分:3)

ARM 11.4.2 (1.1),前后条件是断言。 GNAT默认情况下不启用断言:您需要通过使用-gnata进行编译来启用它们。