출처 : https://www.kernel.org/doc/Documentation/CodingStyle
1. Indentation
- TAB 의 길이는 8 자가 되어야 코드 가독성이 괜찮다.
- TAB의 길이가 8 Indentation 이 3 번 발생하는 경우 코드 가독성이 가 오히려 떨어질 수 있다.
그러나 3 번의 Indentation 이 발생한다는 것은 코드가 제대로 작성되었는지 점검해야 한다.
함수는 하나의 목적으로 단순하게 작성해야 한다.
- 기타
. switch 는 아래와 같이 switch와 동일한 라인으로 Indentation을 준다.
Switch (type){ case 1: break; default : break; } |
2. Breaking Long Lines And Strings
- 보통 80자가 넘게 되면 가독성이 떨어진다.
- 따라서 80자가 넘지 않도록 하며, 넘을 경우에는 줄을 분리한다.
3. Placing braces and spaces
- keyword 옆에는 한칸을 띄고 brace는 statement 에 이어서 작성한다.
keyword 예제
if (condition) { do_this(); do_that(); } // single line 은 brace 불필요 if (condition) do_this(); |
함수 예제
int do_this (void) { do_something(); return 0; } |
4. naming
- 대소문자를 섞어서 쓰는건은 바람직하지 않다. ⇒ 가능한 짧은 변수명을 사용한다.
- global 변수의 경우에는 descriptive word를 사용한다. ⇒ 의미를 알 수 있는 변수명(혹은 함수 이름)을 사용한다.
ex) count_active_users()
- local 변수는 되도록 짧게 쓰는 것이 좋다. 헝거리안 표기법은 그다지 바람직하지 않다.
(5~10 개의 local 변수가 사용되도록 한다. )
5. typedef
- 불필요하게 typedef를 사용하지 않는다. ⇒ 꼭 의미가 있는 typedef만 사용한다.
특히, structure 에 대한 pointer를 정의하기 위한 typedef는 가독성을 불명확한 사용이다.
6. 함수
- 가능한 짧게, 그리고 한가지 목적만 수행하도록 한다.
- descriptive helper함수를 이용하여 간결하게 구현한다.
7. 종료 코드는 한곳으로
- 종료시 특정한 동작들이 필요하다면 goto 문을 사용하여 동일한 코드를 중복작성하지 않도록 한다.
8. 코멘트
- 코멘트에 의한 코드 설명보다는 Code 자체로 설명이 되도로 작성해야 한다.
- 코멘트는 일반적으로 WHAT을 설명한다. (HOW를 설명하지 않는다.)
9, 10 생략
11. Data Structure
- 여러곳에서 사용된다면 reference counter 사용 필요
cf> locking method : locking method는 코드 동기화를 위해 사용하고 reference counter는 memory management.를 위한 technique이다.
12. MACRO, ENUM
- 일반적으로 MACRO 및 ENUM 은 대문자로 기록한다.
- 단, MACRO의 정의 내에 함수 콜이 있다면 소문자로 작성한다.
- ex>
#define MAX_STRING 10
#define do_something() \
do {\
call_me(); \
call_it(); \
} while(0)
13. Printing Kernel Message
- 커널 헤더에 정의된 print문을 사용한다.
- <linux/device.h> 혹은 <linux/printk.h> 참조
14. 메모리 할당
- malloc(*p) 형태로 할당하지 말것!
15. inline 재앙
- 너무 많은 inline을 남발하면 오히려 느려진다. (i-cache 실패 확률 상승)
16. 함수 반환값
- int 값으로 반환 : 어떤 행동이나, 지시형 command (ex> turn_on_cpu())
- boolean : 진술 혹은 단정형 함수 (ex> cpu_is_up() )
- value 혹은 out of range value : 연산이나 계산 결과를 반환하는 경우에는 에러값으로 out of range값을 반환한다. ( ex> NULL 포인터 반환)
17. kernel MACRO를 재구현하거나 기존재하는 걸 다시 구현하지 말것
18. 생략
19. 생략