如何在运行时检测是否启用了某些编译器选项(如优化)?

时间:2013-10-31 13:40:36

标签: delphi runtime delphi-7 conditional-compilation

我想在程序的标题中显示该程序是如何编写的。最重要的是,我想展示编译器优化是否开启/关闭。

(范围检查和其他类似的东西也很有趣,但主要是我对编译器优化很感兴趣。)

知道该怎么做吗?


基于Arioch的准备使用功能回答:

function CompilerOptimization: Boolean;  { Importan note: $O+ has a local scope, therefore, the result of the function reflects only the optimization state at that specific source code location. }
begin
 {$IfOpt O+}
 Result:= TRUE;
 {$Else}
 Result:= FALSE;
 {$EndIf}
end;

function CompilerOptimizationS: String;
begin
 Result:= 'Compiler optimization is ' +
 {$IfOpt O+}
 'enabled'
 {$Else}
 'disabled'
 {$EndIf}
end;

重要提示:如果您使用{$ O}开关优化代码片段,则必须将其用作此类子函数,否则,如果仅使用全局开关(在“项目选项”中),则可以将其用作正常(声明)函数。

// {$O+} or {$O-}
procedure TFrmTest.FormCreate(Sender: TObject);

 function CompilerOptimizationS: String;
 begin
  Result:= 'Compiler optimization is ' +
  {$IfOpt O+}
  'enabled'
  {$Else}
  'disabled'
  {$EndIf}
 end;

begin
 ///...more code here
 Caption:= 'Version: '+ GerVerStr+ ' '+ CompilerOptimizationS+ etc+ etc;
end;

1 个答案:

答案 0 :(得分:6)

ShowMessage(' Optimization is ' +
{$IfOpt O+}
'enabled'
{$Else}
'disabled'
{$EndIf}
);

PS。文档...去Google阅读“Delphi IfOpt”将为您带来很多链接,包括

PPS。 gammatester 绝对正确“自{$ O +}具有本地范围,您的消息/标题仅反映该特定源代码位置的优化状态”