[완료]간단한 if문 조건 작성에 대해.

tatchi의 이미지

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이란 말인가요...
대체 왜 이런지 이해가 되지 않습니다.
도움 바랍니다.

pastime의 이미지

4906 != 4096

그리고 이런 매직 넘버라면 매크로 상수를 이용하시는 것이 더 좋아보이는군요..

tatchi의 이미지

정말 감사합니다ㅠㅠㅠㅠㅠ
어떻게 이런 일이.....

realb의 이미지

packet->addr.source > 4906 부분이 거짓이라도
이후 or 연산이기때문에 계속 수행합니다.
packet->addr.dest > 4096 이 참이므로
if내로 진입하지요

raymundo의 이미지

정말 눈으로 쓰윽 봐서는 뭐가 문제인지 발견하기 힘들군요, 캠브릿지 효과란 게 참 대단합니다 ^^;

좋은 하루 되세요!