2012-07-25 4 views
2

이 질문은 내가 stackoverflow에서 읽은 다른 질문에서 본 답변과 관련된 후속 질문입니다. 특정 함수 (this question)에 대한 오버플로 검사를 비활성화하려면이 코드가 컴파일러 옵션이나 코드에서 이전에 활성화되지 않았더라도 함수를 실행 한 후 갑자기 오버플로 검사가 활성화되도록할까요? Delphi에서 오버플로 검사 사용 안 함

{$OVERFLOWCHECKS OFF} 
// function here 
{$OVERFLOWCHECKS ON} 

내가 (아마도? this 예와 유사) 반환하는 IFOPT 블록과이 결합해야합니까 오버 플로우 검사 (실수로 빌드가 아닌 디버그에 체크 오버 플로우를 사용하지 않도록) 이전 상태로 ? 아니면 두 가지가 다르며 충분합니까? 보너스 : IFOPT가 필요한 경우 조건부로 오버 플로우 검사를 사용하지 않도록 설정하는 구체적인 구문은 무엇입니까?

+0

는 개인적으로 오버 플로우 확인 특정을 단위 테스트해야합니다입니다 코드를 생각하고, 명시 적으로 프로젝트 설정을 무시하고 장치의 상단에 {$ OVERFLOWCHECKS 켜기/끄기}으로 하드 코딩 한 다음 쓰기 어떤 프로젝트 설정도 유닛을 손상시키지 않도록 코드를 테스트하십시오. –

답변

13

예, 게시 한 스 니펫은 이전 버전과 관계없이 자동으로 오버플로 확인을 사용합니다.

이렇게하면됩니다. 원하는 경우 {$Q+}{$Q-}을 각각 {$OVERFLOWCHECKS ON}{$OVERFLOWCHECKS OFF}으로 바꿀 수 있습니다.

{$IFOPT Q+} 
    {$DEFINE OVERFLOW_ON} 
    {$Q-} 
{$ELSE} 
    {$UNDEF OVERFLOW_ON} 
{$ENDIF} 
// 
// Your code here 
// 
{$IFDEF OVERFLOW_ON} 
    {$Q+} 
    {$UNDEF OVERFLOW_ON} 
{$ENDIF} 
+0

$ Q의 범위가 로컬이기 때문에 너무 복잡해 보입니다. 실제로는 너무 복잡한 프로젝트가있는 경우를 제외하고는 너무 큰 단위가 아닌 것처럼 보입니다. 팀. – jachguate

+0

@jachguate, 아니에요. 코드를 껐다가 켜면 그 코드 사이에 영향을 미치지 만 코드를 그대로두면 코드가 다른 곳으로 바뀔 때까지 계속 남아있게됩니다. 이후 다른 곳에서 특별히 끄지 않으면 컴파일 된 모든 항목에 영향을 미칩니다 (적어도 해당 단위에서, 그리고 아마도 더 많이). 시도 해봐. 복잡한 경우라면 몇 번의 키 입력과 Ctrl + J (또는 템플릿을 그런 식으로 설정하면 탭 또는 공백)을 사용하여 모든 것을 수행하는 코드 템플릿을 쉽게 작성할 수 있습니다. –

+0

위의 기술은 작동하지만 OP에 사용하지 않는 것이 좋습니다. –