此代码是我在我的应用程序中使用的第三方组件的一部分.我正在尝试解决与我的应用程序中的提示相关的所有可能问题.但我无法理解这一点.Delphi Compiler标记了这段代码的第一行,提示"分配给NewState的值从未使用过!我只是想了解情况
NewState := STATE_UNCHECKED; //Value assigned never used?Really?
while ( Node <> nil ) and ( Node.Parent <> nil ) do
begin
Node := Node.Parent.GetFirstChild;
CheckedCount := 0;
UnCheckedCount := 0;
while True do
begin
....
if ( Node.StateIndex = STATE_PARTCHECKED ) or
( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
begin
NewState := STATE_PARTCHECKED; ///assign value on condition
Break;
end;
if Node.GetNextSibling = nil then
begin
if CheckedCount > 0 then
NewState := STATE_CHECKED //assign value on condition
else
NewState := STATE_UNCHECKED;
Break;
end
else
Node := Node.GetNextSibling;
end;
Node := Node.Parent;
if Node <> nil then
SetState( Node, NewState );
end;
Run Code Online (Sandbox Code Playgroud)
但是当这两个判断都是假的时候必须使用这个值.我错了吗?
if ( Node.StateIndex = STATE_PARTCHECKED ) or
( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
Run Code Online (Sandbox Code Playgroud)
和
if Node.GetNextSibling = nil then
Run Code Online (Sandbox Code Playgroud)
UPDATE
答案是正确的.只有在为变量分配新值并覆盖第一个值后,Break Statment才会运行.然后从未使用过赋值.
一个最小的,完整的,可验证的例子:
procedure TForm1.btn1Click(Sender: TObject);
Var x,y,z,k:integer;
begin
X:=1;
Y:=strtoint(edit1.text);
Z:=Strtoint(edit2.text);
K:=Strtoint(edit3.text);
while true do
begin
If Z=y*2 then
begin
X:=2;
Break;
end;
If Y=3 then
begin
If K=7 then
begin
X:=3;
Break;
end
else
begin
x:=6;
Break;
end;
end
end;
showmessage(inttostr(x));
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |