Introduction
코드 리뷰하다가, 가끔 만나는 포인터 접근, 이러한 접근을 잘못하면 크래쉬가 나기 쉽다. 이러한 사실을 알고 있음에도, 포인터 접근에 대한 계산이 가끔 잘 안될 때가 있다. 오늘 그러한 계산이 잘 안되는 코드를 발견하여 정리해 둔다.
Content
크다 와 작다는 같다 보다 왜 더 이해 하기 어려울까?
우선 작다 또는 크다의 의미를 if 문을 통해 생각해 보면 다음과 같다.
if ( 1 > 2 ) 는 거짓이다. 왜냐하면 1이 2보다 작은데 크다고 했기 때문이다.
if ( 2 > 2 ) 는 거짓이다. 왜냐하면 2는 2보다 크지는 않기 때문이다.
if ( 3 > 2 ) 는 참이다. 왜냐하면 3은 2보다 더 크기 때문이다.
그러므로 크다 또는 작다의 반대는 >= 이거나 <= 이 된다.
그러면 같다 는 어떨까?
if ( 1 == 2 ) 는 거짓이다. 왜냐하면 1과 2는 안같기 때문이다.
if ( 2 == 2 ) 은 참이다. 왜냐하면 1과 2는 같기 때문이다.
if ( 3 == 2 ) 는 거짓이다. 왜냐하면 3과 2는 안같기 때문이다.
그러므로 같다 의 반대는 != 로 표현 할 수 있다.
이 처럼 크다와 작다는, 큰 것도 아니고 작은 것도 아닌 "상태"가 있어 애매모호해 지므로, 판단하는데 뇌를 더 써야만 한다. 하지만 같다는 둘 중 하나만 생각하면 되므로, 이해가 빠르다. 아마도 실제 생활에서 크다와 작다라는 개념보다, 같다와 틀리다 라는 개념을 더 많이 사용해서 그럴 수도 있다.(실제 생활에선 난수가 많아서 예를 찾기가 힘드네..)
그러므로, 항상 두 가지 상태에서 한 가지를 고르는 코드가 더 이해하기가 쉽다는 뜻이다.
case 1은, 크다 or 작다 개념이 들어 있는 코드이고, case 2는 같다, 틀리다 개념이 들어 있는 코드이다.
Digression
아마도 이런 실수 한 두번쯤 경험 했을 것이다. ...
'연구실 > 파편화된 기록들' 카테고리의 다른 글
리눅스 컴파일 환경 구축하기 - Debian 편 (0) | 2010.10.12 |
---|---|
소멸자로 객체를 초기화 하는 작업은 무척 위험하다. (2) | 2010.07.31 |
C++ 비가상 함수를 상속 클래스가 재정의 했을 경우 (4) | 2010.07.13 |
for while 사용 차이점 (0) | 2010.03.23 |
윈도우 7, 창 최대화 최소화, 화면 분할 좌측 붙이기, 화면 분할 우측 붙이기 (360) | 2010.01.15 |
%= 연산 Vs if 연산의 비교 (720) | 2010.01.11 |
for문 보다 STL이 더 직관적이고, 수정이 편하다. (360) | 2009.12.23 |
if 지옥 또는 if Hell 이라고 나는 이름을 지었다. (360) | 2009.12.22 |
어떤 if 문이 인간이 이해하기 더 좋을까? (554) | 2009.12.02 |
멀티 쓰레드 기반에서 C++로 어떻게 편하게 락을 걸까? (360) | 2009.11.28 |
최근댓글