수색…


소개

이렇게하면 자신이 만든 런타임 오류 검사 루틴을 쉽게 통합하여 끌 때 코드 오버 헤드가 발생하지 않게됩니다.

사소한 예

{$DEFINE MyRuntimeCheck} // Comment out this directive when the check is no-longer required!
                         // You can also put MyRuntimeCheck in the project defines instead.

   function MyRuntimeCheck: Boolean;  {$IFNDEF MyRuntimeCheck} inline;  {$ENDIF}
   begin
      result := TRUE;
      {$IFDEF MyRuntimeCheck}
        // .. the code for your check goes here
      {$ENDIF}
   end;

개념은 기본적으로 다음과 같습니다.

정의 된 기호는 코드의 사용을 켜는 데 사용됩니다. 또한 명시 적으로 줄이 정렬되는 코드를 중지합니다. 즉, 검사 루틴에 중단 점을 두는 것이 더 쉽습니다.

그러나,이 건설의 진정한 아름다움은 더 이상 수표를 원하지 않을 때입니다. $ DEFINE 을 주석 처리하여 ( '//'앞에 붙이면) 체크 코드를 제거 할뿐만 아니라 루틴 대한 인라인 을 켜서 호출 한 모든 장소에서 오버 헤드를 제거합니다 루틴! 컴파일러는 검사의 모든 흔적을 완전히 제거합니다 (물론 인라인 자체가 "On"또는 "Auto"로 설정되었다고 가정).

위 예제는 본질적으로 "assertions"개념과 유사하며, 첫 번째 줄은 사용법에 따라 TRUE 또는 FALSE로 결과를 설정할 수 있습니다.

그러나 이제는 추적 로깅, 메트릭 등을 수행하는 코드에이 방식을 자유롭게 사용할 수 있습니다. 예 :

   procedure MyTrace(const what: string);  {$IFNDEF MyTrace} inline;  {$ENDIF}
   begin
      {$IFDEF MyTrace}
        // .. the code for your trace-logging goes here
      {$ENDIF}
   end;
...
MyTrace('I was here');   // This code overhead will vanish if 'MyTrace' is not defined.
MyTrace( SomeString );   // So will this.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow