DELPHI 编译器,编译控置问题。 ( 积分: 50 )

  • 主题发起人 主题发起人 张辉明
  • 开始时间 开始时间

张辉明

Unregistered / Unconfirmed
GUEST, unregistred user!
if self.Ipsavestatu then self.Ipsavestatu := False;
self.Ipsavestatu := True;

由于DELPHI编译器的优化,上面第一句话有可能被DELPHI编译器忽略,把DELPHI优化选项去掉,第一句话
就可以编译,并执行了。
 我想问的是:DELPHI有没有一个编译器的控置指令,使上面的第一句强制编译执行??
 
if self.Ipsavestatu then self.Ipsavestatu := False;
self.Ipsavestatu := True;

由于DELPHI编译器的优化,上面第一句话有可能被DELPHI编译器忽略,把DELPHI优化选项去掉,第一句话
就可以编译,并执行了。
 我想问的是:DELPHI有没有一个编译器的控置指令,使上面的第一句强制编译执行??
 
这条指令放在项目的哪里?
 
不光是编译器,我也觉得第一行可以优化掉,如果不是你在Set这个属性
的时候要隐含的做点什么的话。[:(]

Type Switch
Syntax {$O+} or {$O-}
{$OPTIMIZATION ON} or {$OPTIMIZATION OFF}
Default {$O+}
{$OPTIMIZATION ON}
Scope Local
The $O directive controls code optimization. In the {$O+} state, the compiler performs a number of code optimizations, such as placing variables in CPU registers, eliminating common subexpressions, and generating induction variables. In the {$O-} state, all such optimizations are disabled.
Other than for certain debugging situations, you should never have a need to turn optimizations off. All optimizations performed by the Delphi compiler are guaranteed not to alter the meaning of a program. In other words, the compiler performs no "unsafe" optimizations that require special awareness by the programmer.

Note: The $O directive can only turn optimization on or off for an entire procedure or function. You can’t turn optimization on or off for a single line or group of lines within a routine.
 
首先谢谢两位的回复。
{$O-}
if self.Ipsavestatu then self.Ipsavestatu := False;
  {$O-}
self.Ipsavestatu := True;
这样就可以了。
到底 {$O-}放在哪里最好呢????

tseug, 被你说对了,在写这个属性时,还要做一些动作的。
 
我一般都是把编译选项放在单元名下面,集中放一些特殊的编译选项,比如

unit CommClient;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
ComObj, ActiveX, AxCtrls, Classes, EventSinks, Server_TLB, StdVcl;

....
 
tseug :
你上面的 {$WARN SYMBOL_PLATFORM OFF} 只是对本单元有效对吗?
 
是的,但是有些编译选项是全局的,比如{$APPTYPE CONSOLE}
 
多人接受答案了。
 
后退
顶部