2017-12-01 1 views
1

나는 익명의 하위 유형의 다음과 같은 선언을했다 : 나중에 그런Ada가 제약 조건 오류를 제기하지 않는 이유는 무엇입니까?

testConstraint : Integer Range -5 .. 5; 

, 그것을 할 때 할당 :

testConstraint := -6; 

하는 이유는 Constraint_Error을 받고 있지 않다을?

추가 세부 사항 : 파일의 일부 with를 통해 추가 있기는하지만 (문제의 코드 파일에는 pragma suppress 문이 없습니다

  • ,
  • 빌드가 gprbuild 사용하여 GPS 5.0.2 및 통해 이루어집니다 GNAT 프로 6.4.2
  • 사용되는 다음의 플래그가 있습니다 -gnatf -gnatp -gnat2012 -d
  • 그것은 또한 .gpr 파일에서 "외부"에서 들어오는 플래그 있어요 -을하지만 이러한 또는 모르는이 이것은 의미합니다. @Timur 및 ​​@theMayer으로
+1

어떤 컴파일러 및 컴파일 플래그를 사용하고 있습니까? https://stackoverflow.com/questions/14526945/why-does-an-ada-compiler-let-range-violations-pass-why-is-my-type-declaration-a/14527545#14527545 –

+0

정말 재미 있습니다. gprbuild에도 동일하게 적용됩니까? – theMayer

+0

인수를 추가하려고했지만 효과가 없습니다. – theMayer

답변

6

노트 :

-gnatp 모든 검사를 억제한다. 문서에서

:

-gnatp

이 스위치 프라그 억제 (All_checks)처럼 컴파일 유닛 발생 소스 존재였다. 유효성 검사 도 제거됩니다 (즉, -gnatp는 -gnatVn을 의미 함). 잘못된 데이터 또는 프로그램 버그가있는 경우 안전을 희생시키면서 코드 성능을 향상 시키려면이 스위치를 으로 사용하십시오.

모든 검사를 억제하는 것은 정말 좋은 생각입니다. 특정 단위에 대해 점검 할 필요가 없다면 (예 : SPARK를 사용하여) 점검이 필요하지 않음을 입증 한 경우, 모든 검사를 생략하면 필요한 성능이 향상됩니다.

해결 방법은 컴파일러 플래그 -gnat-p을 추가하는 것입니다 (요구 사항이 충족되면 개별 파일에 대한 검사를 억제합니다).

관련 문제