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

the*_*yer 1 constraints ada

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

testConstraint : Integer Range -5 .. 5;
Run Code Online (Sandbox Code Playgroud)

然后,在分配时:

testConstraint := -6;
Run Code Online (Sandbox Code Playgroud)

为什么我没有得到Constraint_Error

额外细节:

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

Jac*_*sen 6

正如@Timur和@theMayer所说:

-gnatp 抑制所有检查.

从文档:

-gnatp

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

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

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