개발중의 코드를 약간 단순화 시켜서...
int min = -10000;
int max = -8000;
int val = -7000;
if ( min < val && val < max );
{
// A 블럭
}
을 실행시켰는데 A 블럭이 실행 되는 문제가 생겨서 한참을 고민 했드랩니다.
0 의 갯수를 잘못 세었나 확인도 하고 음수일때는 대소가 이상해지는 건가,
아님 특정 변수가 unsigned 로 되어있나.
정답은... (소스를 긁어보세요)
PS. 버그를 발견 후 제 표정:

PS2. 위의 상황은 컴파일 옵션 /W3 에서 C4390 경고가 뜹니다. 도대체 누가 /W1 로 해놓은 겨!
int min = -10000;
int max = -8000;
int val = -7000;
if ( min < val && val < max );
{
// A 블럭
}
을 실행시켰는데 A 블럭이 실행 되는 문제가 생겨서 한참을 고민 했드랩니다.
0 의 갯수를 잘못 세었나 확인도 하고 음수일때는 대소가 이상해지는 건가,
아님 특정 변수가 unsigned 로 되어있나.
정답은... (소스를 긁어보세요)
PS. 버그를 발견 후 제 표정:

PS2. 위의 상황은 컴파일 옵션 /W3 에서 C4390 경고가 뜹니다. 도대체 누가 /W1 로 해놓은 겨!




덧글
Red-Dragon 2009/04/07 15:25 # 답글
그러고보니 제가 C를 학원에서 배울때 뭐 이러저러 저런건 틀리지 않았던거같은데 문제점이저는 모든 단어의 앞글자를 대문자로 쓴단 말입니다.(습관) 우아악... ;;;
시즈하 2009/04/07 15:31 # 답글
전엔 이런것도 있었습니다...if (100 <= val < 200) { ... }
이 경우 val이 어떤 값이어도 조건이 통과해 버리죠...
클랴 2009/04/07 17:03 #
그건 C4804 ... /W3 쵝오... ㅠㅠ
슈나 2009/04/07 16:04 # 답글
;;;; <- 이것이 문제군요...
게드 2009/04/07 17:40 # 답글
..;;; 습관적인 ';'는 VB에서도 오류를 띄우죠.. -ㅅ-;
별자리점 2009/04/07 20:01 # 답글
비슷한 유형으론for(int i=0;i<10;i++);
{
//Blocks
}
가 있지요(..........)
클랴 2009/04/07 20:57 #
바로 그것 땜시 몇일전에도 한참을 헤맸습니다. ㅠㅠ
하이얼레인 2009/04/07 20:32 # 답글
얼마나 걸리셨나요(.............)
클랴 2009/04/07 20:58 #
1시간 쯤?
Shirou君 2009/04/09 23:53 # 답글
JSP 짜다가 저도 저런 적 있습죠.그리고 ORACLE 에서 자료 다 입력해놓고 COMMIT 안해서 날린 적도 있고요.[어이]
클랴 2009/04/10 10:26 #
BEGIN TRANSACTION 하면 자동으로 ROLLBACK 이 입력되는 에디터에서 작업하세요. (어이)
Shirou君 2009/04/10 22:25 #
커밋을 안한건 기억상실이라고 하면...롤백은 1종 반납이니 더 무서운 것 아닙니까아;ㅅ;
클랴 2009/04/11 15:01 #
잘못된 데이터가 들어가는 것보단 낫지요..rollback 하기전에 잘 들어갔나, 다른 오류는 없나 확인후
commit으로 수정해서 또 실행하는 습관이 좋다고 하더군요.
SeaBlue 2009/04/12 20:49 # 답글
저는 JAVA하고 C# 밖에 모르는지라 위의 상황이 이해가 안 가는 T.T
클랴 2009/04/13 10:12 #
java 나 c# 에서도 if ( true ) ; { ... } 는 여전히 버그일텐데요..혹시 rollback/commit 말씀 이신지?