답없는 종교 전쟁을 또 다시 시작하자는 이야기는 아니구요. 페북에 재미난 그림이 있어서 퍼왔습니다. Allman과 K&R 스타일을 비교한 것 같은데요. 전 개인적으론 Allman 스타일을 선호합니다. 이유는 위키 페이지에 나와 있는 아래 코드와 같은 장점들 때문입니다.
//while (x == y)
{
something();
somethingelse();
}
//for (int i=0; i < x; i++)
//while (x == y)
if (x == y)
{
something();
somethingelse();
}
char c;
#ifdef HAS_GETCH
while ((c = getch()) != EOF)
#else
while ((c = getchar()) != EOF)
#endif
{
do_something(c);
}
결국 이 이야기 끝에는 블록 단위로 복사, 붙여넣기 편하다는 장점이 위치할 것 같습니다. K&R 스타일을 사용할 경우 블록 단위 복사, 붙여넣기를 하려면 결국 셀 선택을 해야하는 불편함이 있거든요. 물론 이런 이야기를 하면 사이비 프로그래머니까 창조성 없는 복붙 프로그래밍이나 하는것 아니냐는 반론을 감수하긴 해야겠지요. 창조적인 프로그래머 아저씨, 리누스 토발즈옹은 K&R에 대한 신념을 언급한 적이 있었지요.
C 스타일과 관련돼서 항상 튀어나오는 다른 이슈는 괄호를 어디다 위치시키냐 하는 것이다. 인덴트 사이즈와 다르게, 다른 것을 배제하고 한 가지 배치 전략을 선택하는 것은 아주 조금의 기술적인 이유밖에 없다. 그러나 좋아라 하는 방법은 열기 괄호는 라인 끝에 위치시키고, 닫기 괄호는 라인의 처음에 위치시키는 것이다. 이러한 방법은 커닝헌과 리치와 같은 선지자들이 우리에게 보여준 것이기도 하다. 아래와 같이 될 것 이다.
if (x is true) {
we do y
}
그러나, 거기에는 함수라는 한가지 특별한 경우가 있다. : 그것들은 다음과 같이 열기 괄호를 다음 줄의 시작에 위치시킨다.
int function(int x)
{
body of function
}
전세계에 분포한 이단자들은 이것은 모순이다... 음 불완전하다...,라는 주장을 펼친다. 그러나 바르게 생각하는 모든 사람은 (a) K&R은 올바르며 (b) K&R도 옳다는 것을 알고 있다. 게다가, 함수는 어쨌든 특별하다 (C에서 함수는 중첩이 불가능하다).
여러분은 어떤 스타일을 선호하시나요? 특별한 이유가 있으신가요?