Ada 为什么';此代码是否生成约束错误或打印正数?

Ada 为什么';此代码是否生成约束错误或打印正数?,ada,Ada,我希望这段代码要么生成一个约束错误,要么打印一个正数。为什么这段代码两者都不起作用 带有Ada.Text\u IO; 使用Ada.Text\u IO; 程序溢出是错误的 程序P(I:阳性)为 X:整数:=整数的最后一个; 开始 X:=(X+I)/2; 放线(整数图像(X)和“应为正”); 结束; 开始 P(10); 结束; 可能是因为您的编译器未配置为作为适当的Ada编译器工作。具体来说,GNAT的旧版本需要一个标志来作为适当的Ada编译器工作。根据我的笔记,旗帜是: -fstack-check

我希望这段代码要么生成一个约束错误,要么打印一个正数。为什么这段代码两者都不起作用

带有Ada.Text\u IO;
使用Ada.Text\u IO;
程序溢出是错误的
程序P(I:阳性)为
X:整数:=整数的最后一个;
开始
X:=(X+I)/2;
放线(整数图像(X)和“应为正”);
结束;
开始
P(10);
结束;

可能是因为您的编译器未配置为作为适当的Ada编译器工作。具体来说,GNAT的旧版本需要一个标志来作为适当的Ada编译器工作。根据我的笔记,旗帜是:

-fstack-check -gnata -gnato

什么编译器/编译器版本/编译选项?代码做什么?gnat 6.3.0(Debian Stretch):
提升约束\u错误:溢出。adb:8溢出检查失败
(带有默认标志)GCC 4.9.1默认情况下不提升CE;更高的版本可以。这段代码是从哪里来的?(它已经在我的机器上了!从2016年5月开始!!)啊!它是关于软件工程的--但用小写字母!谢谢你,雅各布。使用gcc版本5.4.0 20160609并使用这些选项进行编译会给我带来我一直在寻找的约束错误(见下文):gnatmake-fstack check-gnata-gnato overflow.adb./overflow-raised constraint_error:overflow.adb:8 overflow check failedInteresting!5.2(在macOS上)不需要
-gnato
来提高CE。使用GNAT的最新版本,您可以更具体地控制中间结果的计算方式-gnat01使用整数子类型的基类型计算它们(与示例中的-gnato相同)-gnato2使用最大的机器整数类型;在这个例子中,这相当于Long_Long_整数,可能是64位,这个特定的结果在数学上是正确的。不过,其他一些表达式仍可能引发约束错误-gnat3使用无界整数类型(大nums)进行中间计算,始终确保结果在数学上是正确的。