Vib*_*nRC 0 delphi compiler-construction optimization code-generation
Delphi编译器将如何编译以下代码;
uses a_big_unit;
procedure TForm1.Button1Click(Sender: TObject);
var
acompont : T_a_big_component ;
begin
if (true = false ) then // or if false then
begin
bc := Tbig_component.create(self)
end;
Run Code Online (Sandbox Code Playgroud)
在此代码中,true = false将永远不会发生,因此组件acompont将永远不会创建.
当delphi在优化模式下编译时,这些未使用的单元和代码将被省略
当使用单位时
在delphi 7中,即使你只使用XPMan单元; (不使用任何组件(TXPManifest1)),仍然使用单位,每个组件都以主题显示;
有些人说德尔福如果不需要就会省略单位;
那么Delphi如何识别一个单元是否对它所调用的单元产生影响
亲眼看看:编译代码并在调试器中运行它.您将无法在if false then块内的任何语句上设置断点,并且您将无法在另一个单元中的Tbig_component类的构造函数中设置任何断点.为什么?因为这些语句没有任何代码.
您还可以通过在IDE中打开"反汇编"视图来查看编译器生成的机器代码.它将显示每个源代码行的机器代码.你会发现没有为该if false then块生成机器代码.