내가 이해하지 못하는 컴파일러 경고를 받고 오전 :변수가 초기화되지 않을 것이라는 컴파일러 경고 메시지가 나타나는 이유는 무엇입니까?
procedure Test;
var
Var1: Integer;
begin
while True do
begin
try
if System.Random > 0.5 then
begin
ShowMessage('Skipping');
continue; // If I remove this line, the warning goes away
end;
Var1:=6;
except on
E:Exception do
begin
ShowMessage('Error');
raise;
end;
end;
ShowMessage(IntToStr(Var1)); // Compiler warning on this line
end;
end;
내가 델파이 2010 년에이를 컴파일 할 때 내가 얻을 :
[DCC 경고] OnlineClaimManagerMainU.pas (554) : W1036 변수 'Var1' 은 초기화되지 않았을 수 있습니다.
'계속'에 대한 호출을 제거하면 경고 메시지가 사라집니다.
또한 try/except 절을 제거하고 계속 진행하면 경고가 사라집니다.
Var1을 초기화하지 않고 문제가되는 행에 어떻게 실행됩니까?
컴파일러의 분석은 자신의 분석만큼 깊지 않습니다. Var1이 초기화되었는지 확신 할 수 없습니다. Var1은 항상 초기화되지만 컴파일러에는 분석적 재능이 없다는 것을 알고 있습니다. –
제발 ... 나는 빨개어지고 있습니다 :-) – awmross
그래서 ... 왜 계속해서 고쳐야합니까? 같은 문제가 적용됩니다. 아니면 컴파일러의 마음을 날려 버리는 두 가지 조합의 단순한 복잡성입니까? – awmross