为什么Ada没有提出约束错误?

时间:2017-12-01 16:55:02

标签: constraints ada

我有以下匿名子类型的声明:

testConstraint : Integer Range -5 .. 5;

然后,在分配时:

testConstraint := -6;

为什么我没有Constraint_Error

其他详情:

  • 相关代码文件中没有pragma suppress个语句(尽管通过with添加了一些文件;
  • 使用GPS 5.0.2和GNAT Pro 6.4.2
  • 通过gprbuild完成构建
  • 使用了以下标志:-gnatf -gnatp -gnat2012 -d
  • 它还有来自"外部"的标志。在.gpr文件中 - 但我不知道这些是什么或这意味着什么。

1 个答案:

答案 0 :(得分:6)

正如@Timur和@theMayer所说:

  

-gnatp会抑制所有检查。

来自文档:

  

<强> -gnatp

     

此开关导致单元被编译,就好像源中存在pragma Suppress(All_checks)一样。有效性检查   也被消除了(换句话说-gnatp也暗示-gnatVn)。使用   这个开关以牺牲代码来提高代码的性能   存在无效数据或程序错误时的安全性。

抑制所有检查是一个非常糟糕的主意。您可以针对特定单位执行此操作,如果您已经证明不需要检查(例如使用SPARK),您已经测量到抑制所有检查可以提高性能你需要。

解决方案是使用添加编译器标志-gnat-p(然后 - 如果满足要求 - 禁止检查单个文件)。