Szukaj…


Wprowadzenie

To pokazuje, jak własną procedurę sprawdzania błędów w czasie wykonywania można łatwo włączyć, aby nie generowała narzutu kodu po wyłączeniu.

Trywialny przykład

{$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;

Koncepcja jest w zasadzie taka:

Zdefiniowany symbol służy do włączenia użycia kodu. Zapobiega również jawnemu wstawianiu kodu, co oznacza, że łatwiej jest umieścić punkt przerwania w procedurze sprawdzania.

Jednak prawdziwe piękno tej konstrukcji jest wtedy, gdy nie chcesz już czeku. Przez zakomentowanie $ define ( „//” put in-przed nim) będzie nie tylko usunąć kod wyboru, ale można również włączyć inline do rutyny i usuwać wszelkie narzuty ze wszystkich miejsc, w których powołuje rutyna! Kompilator całkowicie usunie wszystkie ślady czeku (zakładając, że samo wstawianie jest ustawione na „Włączone” lub „Auto”, oczywiście).

Powyższy przykład jest zasadniczo podobny do pojęcia „asercji”, a Twoja pierwsza linia może ustawić wynik na PRAWDA lub FAŁSZ odpowiednio do zastosowania.

Ale teraz możesz również używać tego rodzaju konstrukcji kodu, który rejestruje dane, rejestruje dane i cokolwiek innego. Na przykład:

   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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow