출처 : 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. 생략