Embarcadero Delphi
Tworzenie łatwo usuwalnych kontroli błędów środowiska wykonawczego
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.