H+}, 但s仍然是一个短字符串,
所以, 自然不能像是长字符串一样, 以pchar强制型别转换后当作Null-terminated字符串使
用。
? 承上, 不管程序是{$H+}或{$H-}, 只要字符串是以长字符串方式定义的, 即使
begin..end;中改成{$H-}, 该字符串的操作仍然具有长字符串的特性。
因此, 由于VCL中的字符串都是长字符串, 即使我们的程序是{$H-}, 仍然可以拿它们当长
字符串来使用。
? 不论{$H}的状态如何, 以AnsiString定义的一定是长字符串; 以string[n]或
ShortString定义的一定是短字符串。
{$M 16386, 1048576} 内存配置大小
要改变唯叠(Stack)内存配置大小时, 我们可以有以下两种选择:
? 使用{$MINSTACKSIZE数字}, {$MAXSTACKSIZE数字}, 分别指定最小.最大的Stack
大小.
? 或者使用{$M min, max}, 同时指定最小与最大的值。
使用这些Compiler directive时的注意事项有:
? 写在.DPR中才有效果。
? 堆栈的最小数字必须介于1024至21474835647之间。
? 堆栈的最大数字必须介于$MINSTACKSIZE至21474835647之间。
? 当内存不足而无法满足最小的堆栈大小时, Windows会在激活这程序时
提出错误报告。
? 当程序要求的内存超过$MINSTACKSIZE的大小时, 将举发EStackOverflow例外。
{$Z1} 最小列举大小
这个Compiler directive将影响储存列举型态时最小所需的byte数值。如果宣告列举型
态时, 数值不大于256, 而且也在系统预设的{$Z1}时, 这个列举型态只占用一个byte储
存的。{$Z2}时, 以两个byte储存, {$Z4}时, 以四个byte储存。因为C语言通常以WORD或
DWORD储存列举型态, 如果您的程序需要与C、C++沟通时,{$Z2}{$Z4}就很管用了
{$Z+}, 与{$Z-}分别对应到{$Z1}和{$Z4}。
{$P+} 开放字符串参数
在程序与函数宣告时, 其中的字符串自变量, 在{$P+}时表示是Open string; {$P-}时,
只是一般的字符串变量而已。这个Compiler directive只在{$H-}时有作用。
{$O+} 最佳化开关
建议您维持{$O+}的系统默认值。开启这个Compiler directive, Delphi会自动进行
最佳化处理, 程序可以因此跑得快一些, 您可以放心的打开这个编译开关, Delphi
不会进行不安全的最佳化而使您的程序执行时发生错误。
{$Q-} 满溢检查, {$R-} 范围检查
{$Q}与{$R}是一组搭配使用的Compiler directive, 它们将检查数值或数组的
操作是否在安全的边界中, {$Q}会检查整数运算(如+, -, Abs, Sqr, Pred,
Succ等), 而{$R}则检查字符串与数组的存取是否超出合理边界范围等问题。
使用这两个Compiler directives会因为这些检查动作而降低程序执行的速度,
通常我们会在除错时开启这两个编译开关。
{$U-} Pentium CPU浮点运算安全检查
还记得早期Pentium CPU浮点运算不正确的事吧? 这批CPU应该回收得差不多了,
但如果您仍然不确定程序会不会意外的遇到漏网之鱼或黑心牌经销商的话, 请将这个
Compiler directives设为{$U+}。
根据Borland手册的说明, 如果CPU是没有暇疵的, 设定{$U+}对于执行速度只有轻微
的影响; 但如果是问题CPU, 浮点的除法速度会因此慢上三倍, 是否要打开这个开关,
您心中应该已有取舍。
{$R文件名称} 资源档
在您还没有开始
学习Compiler directives之前, 这个指令就已经出现在您的程序中
了,每次开出一个新的form时, Delphi自动在Implement开头部分中加入{$R *.DFM},
在Project/Source中看到的.DPR程序中也有{$R *.RES}, 这些是什么意思呢? 意思是说,
在编译连结时, 含入与项目主档名同名的.RES, 以及与form unit档案同名的.DFM等资源档。
如果您需要在程序中使用额外的资源(例如: 自订鼠标指针), 请注意不要自行以Resouse
WorkShop或Image Editor等资源编辑器更改这些与Project或Form同名的资源档,
改变这些同名的档案不仅无效, 可能还有不可预期的错误。因些,
您应该在另外一个资源档中存放这些资源, 并于{$R}中写明档案的