Delphi如何编译我的代码

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如何识别一个单元是否对它所调用的单元产生影响

dth*_*rpe 6

亲眼看看:编译代码并在调试器中运行它.您将无法在if false then块内的任何语句上设置断点,并且您将无法在另一个单元中的Tbig_component类的构造函数中设置任何断点.为什么?因为这些语句没有任何代码.

您还可以通过在IDE中打开"反汇编"视图来查看编译器生成的机器代码.它将显示每个源代码行的机器代码.你会发现没有为该if false then块生成机器代码.

  • 正确 - 如果单元A是从项目使用的单元B引用的,则单元A的初始化部分将链接到项目中.如果单元初始化代码接触任何类类型,那么这些类也将被链接.但是,单独引用单元不应该导致单元内的类链接到项目中.有些东西必须引用该类才能使它被链接.注册类,调用类函数或IS测试可能会导致类型被链接. (2认同)