.
델파이 7 을 사용하던 중에 아래의 if 문이 제대로 동작 않는 오류(버그?)를 발견했습니다.
if ( bEnabled = TRUE ) AND
( bCompleted = TRUE ) then
begin
bEnabled := FALSE;
bCompleted := FALSE;
end;
이와같이 문장을 작성해서 런해보면 if 안의 모든 조건이 TRUE인 상황에서도 if 블럭이 실행 안됩니다.
그래서 위의 문장을 아래와 같이 수정하면 이상없이 동작합니다.
if bEnabled AND
bCompleted then
begin
bEnabled := FALSE;
bCompleted := FALSE;
end;
그러니까 불린 변수를 = TRUE와 같이 비교하면 if 문제어 제대로 못 잡아주는군요.
저는 C++ 을 하던 사람이라 아래문장을 싫어하는 편입니다. 아니, C++을 하던 습관 때문이라기 보다
bEnabled, bCompleted 가 명백하게 어떤 데이타 타입인지를 if 조건으로 알 수 없는 것을 싫어 하기
때문에 bEnabled = TRUE 와 같이 비교를 하는거죠.
PASCAL 은 if 문의 조건으로 boolean만 허용하긴 하지만, C++ 부터 주욱 if 문 안의 조건으로 들어가는
변수들의 명백한 타입을 표현하기 위해 위의 표현법을 주로 쓰고 있는겁니다.
두번째 문장만 제대로 동작하는 문제가 델파이 7 에서 해결이 되었는지요? 첫번째 문장을 지금까지 계속
사용해서 아무런 이상이 없었는데 최근에 이 문제가 발생했습니다.
bEnabled, bCompleted는 record type안에 들어있고 if 문은 Thread.Syncronize( )를 통해 불려진 함수
안에 있습니다. 어쩌면 Thread 에서 호출되었기 때문에 발생하는 문제일 수도 있겠습니다.
이 문제에 경험이 있으신 분들은 답좀 부탁 드립니다. 그럼 수고하십시요.
.
|