Was dann aber trotzdem passiert, ist das Aufrufen evtl. leerer Funtionen,
den Funktion-Call würde ich natürlich auch gerne im RELEASE wegbekommen.
Ich glaube, das hatten wir schon mal irgendwo an anderer Stelle (eventuell auch bei
DP-EN oder SO). Wenn du die Methoden
inline deklarierst, sollte gar kein Call mehr gemacht werden. In diesem Beispiel erzeugen die
T.Init und
T.Log Aufrufe keinen Code, wenn in
uLogging nicht
Log definiert ist.
Delphi-Quellcode:
procedure Main;
var
T: TLog;
begin
T.Init('TLogConsole');
T.Log('Hallo Welt');
Writeln('Wie geht''s?');
Readln;
end;
Delphi-Quellcode:
unit uLogging;
interface
{.$DEFINE Log}
type
ILog =
interface
['
{76BA1F8A-D171-4817-BB3D-337295B03CE0}']
procedure Log(AText:
string);
end;
TLog =
record
private
{$IFDEF Log}
FLog: ILog;
{$ENDIF}
public
procedure Init(
const AName:
string);
inline;
procedure Log(AText:
string);
inline;
end;
implementation
type
TLogConsole =
class(TInterfacedObject, ILog)
public
procedure Log(AText:
string);
end;
procedure TLogConsole.Log(AText:
string);
begin
Writeln(AText);
end;
procedure TLog.Init(
const AName:
string);
begin
{$IFDEF Log}
// der Einfachheit halber
FLog := TLogConsole.Create;
{$ENDIF}
end;
procedure TLog.Log(AText:
string);
begin
{$IFDEF Log}
if FLog <>
nil then begin
FLog.Log(AText);
end;
{$ENDIF}
end;
end.