Delphi编译器(在编译文件时)能自动去掉死代码(在打开编译优化功能时).这个非常不错的功能,能够帮助程序员更有效的检查程序.但有时就时这个功能,也可能给程序带来不必要的小Bug.请看以下程序:
function PosChar2(ch:Char;chArray:Array of Char):Integer;
var
i:Integer;
begin
i:=0; //这一句不会被编译
for i:=low(chArray) to high(chArray) do
begin
if ch=chArray[i] then
begin
Result:=i;
exit;
end;
end;
Result:=i; //这里的返回值可能是一个没有初始化的 i 值
end;
怎么解决这个问题?当然项目的设置中关掉编译优化功能,肯定是可能解决问题的,但是这个方法太死了.
其实可以利用编译指令来比较灵活的解决这个问题,请看以下代码:
function PosChar1(ch:Char;chArray:Array of Char):Integer;
var
i:Integer;
begin
{$O-}
i:=0; //这一句会被编译
for i:=low(chArray) to high(chArray) do<