프로그램의 소스 코드는 사람이 작성을 한다. 다른 작업들도 그렇겠지만, 사람들은 상황에 따라서 실수들을 종종한다. 따라서 실수를 가능한 하지 않게 여러가지 방법들을 이용하여 보완을 하는 게 현실이다. 경험적으로 C 언어를 종종 사소한 실수를 많이 했던 것들에 대해서 보완하는 방법 중 한가지가 코딩 스타일이다. 그 중 몇 가지를 정리를 해본다.
조건절 비교
조건절에서 상수 값과 변수의 값이 일치하는지 비교할 때, 대부분의 예제 코드들 보면 이런 스타일로 나온다.
[code c]
if (a == 1)
{
a++;
}
[/code]
간혹 실수로 "==" 대신 "="를 쓰는 경우가 있다. 컴파일 옵션으로 경고 수준을 높이지 않으면 경고로도 나오지 않는다. 경고 수준을 높이고 가능한 모든 경고는 제거하는 습관은 말 안해도 기본이다.
이 경우는 다음과 같은 스타일로 코딩을 하면 실수를 문법 에러로 잡아낼 수 있다.
[code c]
if (1 == a)
{
}
[/code]
if .. else .. 문
디버깅을 하다 보면 심심치 않게 실수를 하게 되는 부분이 if ... else ... 관련된 부분이다. C언어 메뉴얼에서도 if else 관련 주의 사항으로 {} 없는 경우에 대한 얘기가 나온다. 수 많은 코드를 눈으로 그냥 훑고 지나가다 보면 모양만 유심히 보다가 놓치게 되는 경우가 많다. 다음 경우 같은 경우가 되겠다.
[code c]
if (1 == a)
a++;
a++;
[/code]
그리고, 디버깅하다가 간혹 보게되는 실수인 경우가 조건을 만족하지 않았을 때, 해줘야 할 것들을 빠뜨리는 경우가 있는 것을 보게 된다. 그래서 거짓일 때 처리할 게 없다는 것을 명확히 표시를 해 주는 것도 실수를 줄이는 데 도움이 된다.
그래서 if 문 관련 코딩 스타일로 다음 형태로 명확하게 블럭으로 묶어 주고, 처리할 게 없다는 것을 명확하게 표시를 해준다.
[code c]
if (1 == a)
{
a++;
}
else
{
/* do nothing */
}
[/code]
Return 값 처리 무시 표시
라이브러리들의 함수들을 보면 대부분 처리 결과에 따라 Return 값을 넘겨준다. 이런 결과들을 제대로 처리를 해주는 것 또한 튼튼한 프로그램을 만드는 것에 대한 기본이다. 그러나 때로는 실행에 별다른 영향이 없어서 이 Return 값을 무시할 수 도 있다. 그래서 의도적으로 무시를 한다는 표시로 (void)를 함수 앞에 붙여준다.
[code c]
(void)close(fd);
[/code]
( )를 이용하여 명확한 연산자 우선 순위 표시
10년 넘게 C 언어를 사용해 왔지만, 아직도 연산자 우선 순위가 아리까리 하다. 간혹 이런 연산자 우선 순위를 잘 못 알고 있어, 디버깅 하다 보면 의도하지 않게 동작하는 코드들을 종종 만나기도 한다. 그래서 가장 높은 우선 순위를 가진 ( )를 이용하여 명확하게 한다.
[code c]
a = (a + (a * 2)) / 2;
[/code]
그 외에도 더 있겠지만, 지금 생각나는 것들만 정리를 해보았다. 핵심은 명확하게 표현을 하는 것이다.