[완료]간단한 if문 조건 작성에 대해.
printf("packet->addr.source=%u, packet->addr.source > 4906=%d \n", packet->addr.source, packet->addr.source > 4906);
printf("packet->addr.dest =%u, packet->addr.dest > 4906=%d \n", packet->addr.dest, packet->addr.dest > 4906);
printf("%d\n", ( (packet->addr.source) > 4906) || ((packet->addr.dest) > 4096));
if ( (packet->addr.source > 4906) || (packet->addr.dest > 4096) )
printf(" WARNING!!! CURRENT PORT NUM IS src=[%d],dest=[%d] ###\n\n\n\n", packet->addr.source, packet->addr.dest );
위 코드는 만일, packet의 source port, destination port 중 하나라도 4906번보다 큰 경우에 대해 warning을 띄우기 위해 작성하였습니다.
하지만 실제 실행을 하게되면 다음과 같은 결과물이 나옵니다.
1: packet->addr.source=2402, packet->addr.source > 4906=0
2: packet->addr.dest =4800, packet->addr.dest > 4906=0
3: 1
4: WARNING!!! CURRENT PORT NUM IS src=[2402],dest=[4800] ###
3번 줄은 0||0 == 1이란 말인가요...
대체 왜 이런지 이해가 되지 않습니다.
도움 바랍니다.
오타에 주의하세요..
4906 != 4096
그리고 이런 매직 넘버라면 매크로 상수를 이용하시는 것이 더 좋아보이는군요..
!!!!!!!!!!!!!!!!!!!!
정말 감사합니다ㅠㅠㅠㅠㅠ
어떻게 이런 일이.....
packet->addr.source > 4906
packet->addr.source > 4906 부분이 거짓이라도
이후 or 연산이기때문에 계속 수행합니다.
packet->addr.dest > 4096 이 참이므로
if내로 진입하지요
정말 눈으로 쓰윽 봐서는 뭐가 문제인지 발견하기
정말 눈으로 쓰윽 봐서는 뭐가 문제인지 발견하기 힘들군요, 캠브릿지 효과란 게 참 대단합니다 ^^;
좋은 하루 되세요!
댓글 달기