下面的代码示例应该评估一个字符串.
function EvaluateString(const S: Ansistring): Ansistring;
var
i, L: Integer;
begin
L := Length(S);
i:=1;
if (L > 0) and (S[i] > ' ') and (S[L] > ' ') then
.....
end;
Run Code Online (Sandbox Code Playgroud)
但如果L = 0,(S[i] > ' ')则会产生Access违规.我能在保持这种if状况的同时避免这个问题吗?
Jen*_*nsG 10
您需要{$B-}在代码之上添加语句,或在项目设置中启用布尔短路评估.
由于{$B-}是默认值,您可能之前已将其打开,或者某个{$B+}指令正在将其关闭.
在短路评估模式下{$B-},Delphi创建(大致)等效的代码:
if (L > 0) then begin
if (S[i] > ' ') then begin
if (S[L] > ' ') then begin
.....
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
相比之下,使用完全布尔评估模式{$B+},等效可能是这样的:
var a,b,c : Boolean;
a := (L > 0);
b := (S[i] > ' '); // always executed
c := (S[L] > ' '); // always executed
if a and b and c then .....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |