대부분 사람들이 굳은 믿음을 가지고 있음에도, 중괄호의 ({}
)
위치는 중요하지 않습니다. 그래서 우리는 인기있는 스타일 중
하나를 선택했습니다. 여러분에게 맞는 스타일을 찾은 다음,
그것을 일관성있게 사용하시기 바랍니다.
완전한 스타일을 찾는 것보다는, 하나의 스타일을 일관성있게 사용하는 것이 더 중요합니다. 만약 여러분이 처한 환경이 (예를 들어, 어떤 지역적인 관습이나, 회사 정책 등) 이러한 스타일을 정의하지 않았고, 또, 여러분이 새 스타일을 만들려는 마음이 없다면, 그냥 K&R을 쓰시기 바랍니다. (물론 중괄호의 위치나 들여쓰기의 간격에 대한 많은 논쟁이 있을 수 있지만, 여기에서 그런 논쟁을 하지는 않겠습니다. Indian Hill Style Guide를 참고하기 바랍니다.)
`좋은 스타일'이란 (good style) 단순하게 코드를 어디에 배치하느냐보다 훨씬 많은 것을 내포하고 있습니다; don't spend time on formatting to the exclusion of more substantive code quality issues.
if(!strcmp(s1, s2))이것이 좋은 스타일일까요?
!
연산자는
대개 `not'을 의미하는 곳에 쓰이므로 혼동을 가져올 수 있기 때문입니다.
다음과 같은 매크로를 쓰는 것이 도움이 될 경우도 있습니다:
#define Streq(s1, s2) (strcmp((s1), (s2)) == 0)
if (x == 0)
을 쓰지 않고 if (0 == x)
와
같은 코드를 쓰는 데, 그 이유는 무엇인가요?
if (x = 0)상수를
==
연산자의 왼쪽에 쓰는 습관을 들이면,
다음과 같은 실수를 했을 때, 컴파일러가 에러를 발생합니다:
if (0 = x)어떤 사람들은 이런 방식을 쓰는 것을 외우는 것보다 두 개의
=
를
쓰는 것을 외우는 것이 쉽기 때문에, 이런 방식을 좋아하지 않습니다.
(물론, 이러한 스타일은 한 오퍼랜드(operand)가 상수일 경우에만
도움을 줄 수 있습니다.)
strcpy()나 strcat()의 경우에도 같은 이유로 캐스팅이 사용되곤 합니다.
Site: | File or directory |
ftp.cs.washington.edu | pub/cstyle.tar.Z (최신의 Indian Hill Guide) |
ftp.cs.toronto.edu | doc/programming (Henry Spencer씨의 “10 Commandments for C Programmers” 포함) |
ftp.cs.umd.edu | pub/style-guide |
“The Elements of Programming Style”, “Plum Hall Programming Guidelines”, “C Style: Standards and Guidelines”라는 책이 도움이 될 수 있습니다: `참고문헌'란을 보기 바랍니다.
goto 문장은 남용되면 유지/보수/관리하기 힘들 정도의 복잡한, 이른바 스파게티 코드를 (spaghetti code) 만들어 낼 수 있습니다. 그렇다고, 아무런 생각없이 goto 문장을 무조건 금지하는 것이 즉각 좋은 코드를 만들어 내는 것도 아닙니다: 물론 goto를 전혀 쓰지 않고도 (이상해 보이는 중첩된 루프나, 불리언 제어 변수를 써서) 코드를 만들어 낼 수도 있습니다.
대부분 프로그래밍 스타일에 관한 “규칙(rule)”은 규칙이란 단어보다는 “안내지침(guideline)”이란 단어로 보는 게 더 바람직합니다. 또한 이러한 규칙들이 왜 만들어졌는 가를 이해하는 것이 더 중요합니다. 이러한 규칙에 대한 이해없이, 무조건 어떤 구조를 배척하는 것은 원래 규칙이 의미하고자 한 것과 오히려 반대되는 결과를 만들어낼 수 있습니다.
게다가 프로그래밍 스타일에 대한 많은 의견은 단지 의견일 뿐입니다. 따라서 이러한 “스타일 전쟁”에 참여하는 것은 쓸데없는 짓입니다. (질문 9.2, 5.3, 5.9, 10.7에 이러한 내용이 있습니다.) 여러분의 의견에 반대하는 사람은 결코 여러분의 의견에 동의하지 않을 것이며, 여러분의 의견에 동조하는 사람은 결코 반대하지 않을 것이므로, 이런 논쟁을 할 필요가 없습니다.
Seong-Kook Shin