Ada中的子程序契约 我正在阅读一个关于艾达编程的文档,更具体,艾达为C++ java开发者,或者我遇到了麻烦,并且理解并能够使用文档中给出的一些例子,其中之一是对数据的预处理。

Ada中的子程序契约 我正在阅读一个关于艾达编程的文档,更具体,艾达为C++ java开发者,或者我遇到了麻烦,并且理解并能够使用文档中给出的一些例子,其中之一是对数据的预处理。,ada,Ada,但是,当我编译这个程序时,我只得到一条+Inf**消息 带有Ada.Text\u IO; 使用Ada.Text\u IO; 主要程序是 函数diviao(左、右:浮点)返回浮点 Pre=>Right/=0.0时, Post=>Divisao结果*右左-0.0001 是 开始 返回左/右; 结束除草; 开始 Put_线(浮动图像(diviao(10.3,0.0)); 端干管; PS:在文档中,只有功能声明: function Divisao(Left, Right : Float) return

但是,当我编译这个程序时,我只得到一条+Inf**消息

带有Ada.Text\u IO;
使用Ada.Text\u IO;
主要程序是
函数diviao(左、右:浮点)返回浮点
Pre=>Right/=0.0时,
Post=>Divisao结果*右<左+0.0001
然后除法结果*右>左-0.0001
是
开始
返回左/右;
结束除草;
开始
Put_线(浮动图像(diviao(10.3,0.0));
端干管;
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;
函数diviao(左、右:浮点)返回浮点
Pre=>Right/=0.0时,
Post=>Divisao结果*右<左+0.0001
然后除法结果*右>左-0.0001;

此系统预处理器不应指向此错误?

根据,前置和后置条件都是断言。默认情况下,GNAT不启用断言:您需要通过使用
-gnata

编译来启用断言,前提条件和后置条件都是断言。默认情况下,GNAT不启用断言:您需要通过使用
-gnata

编译来启用断言,前提条件和后置条件都是断言。默认情况下,GNAT不启用断言:您需要通过使用
-gnata

编译来启用断言,前提条件和后置条件都是断言。GNAT默认情况下不启用断言:您需要通过使用
-gnata

编译来启用断言。我不理解您的PS。GNAT确实有一个预处理器(gnatprep),但必须显式调用它;这不是gnatmake处理的一部分。。。请看第27页,这里的“预处理器”一词是错误的。它与处理前置条件(方面)无关。更确切地说,它是指在编译器之前运行的一种工具,它将一些源代码和一些不属于语言的东西结合起来,并对其进行一些转换以生成更多的“标准”源代码,然后将这些代码交给编译器。我不理解你的PS。GNAT确实有一个预处理器(gnatprep),但它必须被明确地调用;这不是gnatmake处理的一部分。。。请看第27页,这里的“预处理器”一词是错误的。它与处理前置条件(方面)无关。更确切地说,它是指在编译器之前运行的一种工具,它将一些源代码和一些不属于语言的东西结合起来,并对其进行一些转换以生成更多的“标准”源代码,然后将这些代码交给编译器。我不理解你的PS。GNAT确实有一个预处理器(gnatprep),但它必须被明确地调用;这不是gnatmake处理的一部分。。。请看第27页,这里的“预处理器”一词是错误的。它与处理前置条件(方面)无关。更确切地说,它是指在编译器之前运行的一种工具,它将一些源代码和一些不属于语言的东西结合起来,并对其进行一些转换以生成更多的“标准”源代码,然后将这些代码交给编译器。我不理解你的PS。GNAT确实有一个预处理器(gnatprep),但它必须被明确地调用;这不是gnatmake处理的一部分。。。请看第27页,这里的“预处理器”一词是错误的。它与处理前置条件(方面)无关。相反,它指的是一种在编译器之前运行的工具,它使用一些源代码和一些不属于语言的东西,并对其进行一些转换以生成更多的“标准”源代码,然后将这些代码提供给编译器。
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;