<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Sep 24, 2014 at 12:17 PM, Sven Barth <span dir="ltr"><<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p>Am 24.09.2014 10:15 schrieb "Tomas Hajny" <<a href="mailto:XHajT03@hajny.biz" target="_blank">XHajT03@hajny.biz</a>>:<span class=""><br>
> However, the trunk compiler offers also another option, although it may or<br>
> may not be usable for you. In particular, take the following:<br>
><br>
> ---------<br>
> var<br>
>  S2: string;<br>
><br>
> procedure Log (S: string);<br>
> begin<br>
>  {$IFDEF TEST}<br>
>   WriteLn (S);<br>
>  {$ENDIF TEST}<br>
> end;<br>
><br>
> begin<br>
>  ReadLn (S2);<br>
>  Log ('Input = ' + S2);<br>
> end.<br>
> =========<br>
><br>
> If this is compiled with trunk compiler using -OoREMOVEEMPTYPROCS (without<br>
> -dTEST), procedure Log is not called at all and the concatenation of<br>
> strings in its parameter is skipped as well.</span></p>
<p>Another possibility would be to define Log() as "inline", which should get rid of the call and maybe the concatenation as well and already works in 2.6.x (though "array of const" would not be supported if needed)</p></blockquote></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Another technique​ I have used in Delphi and works in fpc as well is using the Assert() procedure with a function that has side-effects as argument. E.g.:<br><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">function Log(const S: string): Boolean; inline;<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">begin<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">  WriteLn(S);<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">  Result := True;<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">end;<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">begin<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">  Assert(Log('Hello'),  '');<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">​end;​</div><br><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">​When the program is compiled with assertions enabled it will output a "Hello". ​​When it is compiled with assertions disabled the call to DoWrite and possibly DoWrite itself will be omitted from the exe by the compiler. No IFDEFs and no macros necessary.<br><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">--Constantine<br></div><br></div></div>