수요일, 11월 21, 2007

C coding style

emacs 21.3을 수년 째 잘 써오다가 22 버전으로 업그레이드 했다. 아무래도 gdb와의 연동기능에서는 같은 gnu 프로그램이라서 그런지 vim보다는 emacs가 훨씬 매끄럽다. 그동안 잘 사용해온 감사로 내친 김에 gnu에 메뉴얼도 하나 주문했고...

설정파일을 정리하다가 c언어의 코딩스타일과 gnu 코딩스타일에대한 Linus Torvalds글을 인터넷에서 읽게 되었다. emacs는 c의 기본 코딩스타일이(cc-mode) gnu style로 설정이 되어있다. 그동안 아무 생각없이 책에서 보아봐 온 대로만 코딩을해왔는데 이런 것도 표준이란게 있었던 모양.

제일먼저 원조격인 Kernighan and Richie style. 흔히 줄여서 k&r style이라고 한다. 백마디 말 보다는 한줄의 코딩이 낫다.

int ret function_name(int arg1, int arg2)
{
while (condition){
some code...;
}
return 0;
}

int main(int argc, char *argv[]){
function_name(...);
return 0;
}
아마도 많은 사람들이 익숙한 형태일 것이다. 특징이라면 함수를 정의할때는 { 를 따로 한줄에 써주지만 그 외에는 맨 끝에 붙여 써준다는 거하고 들여쓰기를 5칸한다는 점.

k&r 스타일의 계승자는 Linus Torvalds이다. 리눅스 커널소스가 바로 k&r 스타일을 따르고 있다. 한 가지 정통 k&r과 다른 점이 있다면 들여 쓰기를 5칸이 아닌 8칸을 한다는 점. Linus는 그 이유를 하루에 30시간 이상(?) 코드를 보고 있으면 8칸 들여쓰기가 얼마나 도움이 되는지 알 수 있다고 한다. 30 시간이라...

이에 반해 gnu 스타일은 좀 독특하다. 아래 코드는 Wikipedia에서 퍼왔다.
int
main (int argc, char *argv[])
{
fetch_gizmo (&foo, argv[1]);

check:
if (foo.type == MOOMIN)
puts ("It's a moomin.");
else if (foo.bar < GIZMO_SNUFKIN_THRESHOLD
|| (strcmp (foo.class_name, "snufkin") == 0)
&& foo.bar < GIZMO_SNUFKIN_THRESHOLD / 2)
puts ("It's a snufkin.");
else
{
char *barney; /* Pointer to the first character after */
the last slash in the file name. */
int wilma; /* Approximate size of the universe. */
int fred; /* Max value of the `bar' field. */

do
{
frobnicate (&foo, GIZMO_SNUFKIN_THRESHOLD,
&barney, &wilma, &fred);
twiddle (&foo, barney, wilma + fred);
}
while (foo.bar >= GIZMO_SNUFKIN_THRESHOLD);

goto check;
}

return 0;
}
가장 먼저 눈에 띄는 것이 우선 들여쓰기가 2자리 밖에 되지 않는 다는 점이다. 리턴 값을 따로 한줄에 적어 주는 것도 특이하다. 그런데 여기에 대한 Linus의 반응은 의외로 차갑다.
"I'd suggest printing out a copy of the GNU coding standards, and not read it. Burn them, it's a great symbolic gesture" <http://pantransit.reptiles.org/prog/CodingStyle.html>
Linus가 외모와는 다르게 의외로 고집도 있고 강단이 있는 사람인 모양이다. 언젠가 들었던 테넌바움과의 마이크로 커널에 대한 논쟁도 그렇고...

내 코딩스타일은 k&r에 가까운 것 같다. 다만 들여쓰기는 4글자 정도면 적당한 듯 하지만 이 기회에 아예 정통 k&r스타일로 바꾸는 것도 괜찮겠지 뭐.

그러나 저러나 터미널에 쓰기 적당한 한글 폰트를 빨리 찾아야 할텐데... IT 분야에서도 우리나라의 특징이 나타나는 듯 하다. 신기술에는 민감한데 기본은 아직 모자란다는 느낌.

0 Comment: