이 글은 C++기초플러스(5판)에서 발췌한 글입니다. 
 
실전 프로그래밍 : 조건 표현식의 연산자와 버그 예방법

'같다' 연산자(==)를 사용할 곳에 대입 연산자(=)를 입력하는 실수를 없애기 위하여,
많은 프로그래머들이 더 직관적인 표현인 'variable == value' 를 'value == variable'로 뒤집어 사용하고 있다.
예를 들면, 조건을 다음과 같이 입력하면

 if (3 == nCount)

바르게 동작한다. 그러나 실수로 다음과 같이 입력하면

if (3 = nCount)

리터럴에 어떤 값을 대입하여는 시도로 간주되어 컴파일러가 에러 메시지를 내보낼 것이다.
(3은 언제까지나 3일 뿐이며, 다른값을 대입할 수 없다.) 
그러나 'variable == value'형식을 사용하면서 다음과 같이 == 대신 = 를 입력하는 실수를 범했을 때에는 

if (nCount  = 3)

컴파일러가 nCount에 무작정 값 3을 대입할 것이고, 이 조건은 참이되어 if의 true 블록을 실행할 것이다.
이것은 매우 흔하게 발생하는 에러이지만 찾아내기가 무척 어렵다.
일반적으로, 컴파일러가 에러를 쉽게 찾을 수 있도록 프로그램을 작성하는 것이 찾기 어려운 에러를 만들어 놓고 이를 고치느라 애를 먹는것보다 훨씬 낫다. 

=======================

요약할께요.
if문 쓸때 'if ( nCount == 3)' 이렇게 쓰는것보다 'if (3 == nCount)로 쓰는버릇을 들이는게 좋다 입니다. 

if (nCount = 3) 으로 하면 문법적으로 문제가 없기 때문에 에러검출이 되지 않습니다.
학생분들이야 코드 몇줄 안되지만, 실무로 가면 이걸 일일히 찾아서 수정하기는 어려운 일입니다. 
 
예로 (출력부분에서 예가 잘못되었지만 조건식을 중점으로 든 예이므로 이해 부탁드립니다)

int MyAge = 20;
if (MyAge = 28)

    cout << "내 나이는 28 이다" << endl;

else
{
    cout << "내 나이는 20 이다." << endl;
}

이렇게 하면
"내 나이는 28이다" 가 출력되어 버립니다. 의도에 맞지 않는거죠.
if문에서 '='을 두번 넣는걸 실수로 한번 넣어서 생긴 오류입니다. 하지만 문법적으로 문제는 없죠.
컴파일러가 에러를 잡아주지 않기 때문에 뭐가 문제지? 하면서 오랜시간 디버깅을 해야할수도 있고, 재수좋아서 한방에 끝낼수도있습니다만, 애초에 에러를 안내기 위해서는

int MyAge = 20;
if ( 28 == MyAge)

    cout << "내 나이는 28 이다" << endl;

else
{
    cout << "내 나이는 20 이다." << endl;
}

로 하면  if문의 조건식에서 false를 리턴하기 때문에 if문 안으로 들어가지 않습니다. 그래서 "내 나이는 20 이다"가 출력되는게 정상이죠.

즉, 변경할수 없는 값, 상수값을 앞에 둬야 실수로 '='으로 입력했더라도 컴파일러 수준에서 에러를 검출해 줄수 있습니다. 

ps. 언어마다 다릅니다. java같은 경우는 c와 다른 조건식의 경우를 가집니다.
java는 if문의 조건식에서 대입을 할수 없는것으로 알고있습니다.
이 글은 c와 c++의 경우로 한정하고 있습니다.(제가 아는 범위 한정입니다. 제가 틀렸을경우 신속한 지적 부탁드립니다

+ Recent posts