IF문에서 not 연산사를 사용할 때 가끔 실수할 수 있는 부분이 있는데
not 연산자 다음에 나오는 조건식의 문제로
다음의 예를 보자
if 구분내에 (NOT sl.count > 0) 조건식의 의도는 분명 스트링 리스트(sl)이 비어 있으면 true를 반환하라는 의미일게다
그런데 실제로 위 구문에 의해서 반환되는 값은 sl.count가 0임에도 불구하고 false를 리턴한다
위 조건식에 대한 해석을 해보면(sl.count=0 인경우)
1. sl.Count는 0이다
2. 위 표현식의 우선순위에 의해 "NOT 0"을 먼저 판단하는데 "0"은 정수이고 비트표현식으로 평가된다. 그래서 "-1"이 리턴된다.
3. 다음 연산은 (-1 > 0)이 되는데 따라서 최종 리턴되는 조건식의 결과는 false 를 리턴 한다.
위 구문을 의도한 대로 정상처리하기 위해서는 다음과 같이 바꿔주어야 한다.
if NOT (sl.Count > 0) then ShowMessage('String list is empty');
뭐 간단하거지만 실수하기 쉬운 부분이다..
not 연산자 다음에 나오는 조건식의 문제로
다음의 예를 보자
var sl : TStringList; begin sl := TStringList.Create; try if (NOT sl.Count > 0) then ShowMessage('String list is empty'); finally FreeAndNil(sl); end; end;
if 구분내에 (NOT sl.count > 0) 조건식의 의도는 분명 스트링 리스트(sl)이 비어 있으면 true를 반환하라는 의미일게다
그런데 실제로 위 구문에 의해서 반환되는 값은 sl.count가 0임에도 불구하고 false를 리턴한다
위 조건식에 대한 해석을 해보면(sl.count=0 인경우)
1. sl.Count는 0이다
2. 위 표현식의 우선순위에 의해 "NOT 0"을 먼저 판단하는데 "0"은 정수이고 비트표현식으로 평가된다. 그래서 "-1"이 리턴된다.
3. 다음 연산은 (-1 > 0)이 되는데 따라서 최종 리턴되는 조건식의 결과는 false 를 리턴 한다.
위 구문을 의도한 대로 정상처리하기 위해서는 다음과 같이 바꿔주어야 한다.
if NOT (sl.Count > 0) then ShowMessage('String list is empty');
뭐 간단하거지만 실수하기 쉬운 부분이다..
'프로그래밍 > Delphi' 카테고리의 다른 글
[팁] ActiveX XP에서 한영 전환 안되는 문제 해결책. (0) | 2012.01.05 |
---|---|
[Delphi]*를 포함한 여러 파일 일괄 삭제 (2) | 2011.11.16 |
[Delphi]TComboBox내 아이템의 길이에 따라 가변 DropDown 만들기 (2) | 2011.10.24 |
[Delphi]TPrinter.BeginDoc에서 무한루프 도는 문제 분석 (1) | 2011.10.24 |
[Delphi] IE캐시를 모두 지우기 (0) | 2011.10.12 |