카테고리 없음

코딩 스타일 - 들여쓰기

SciomageLAB 2024. 10. 3. 16:39
반응형

용어 설명

brace, brackets, parentheses

{ } : braces 또는 curly braces

[ ] : brakets

( ) : parentheses

cuddled else

   |   /* cuddled else */    |   /* uncuddled else */
   |   if (x > 0) {            |   if (x > 0) {
   |      x += y;              |      x += y;
   |   } else {                |   }
   |      y += x;              |   else {
   |   }                       |      y +=x;
                               |   }

K&R

배경

C언의 창시자인 Kernighan & Ritchie의 스타일로 C계열 언어처럼 brace를 사용하는 언어에서 사용된다. 유닉스 커널에 사용되었던 스타일이고 창시자들의 책인 The C Programming Language*와 *The Elements of Programming Style.이라는 책에 소개되었다.

특징

  • 이 스타일에서는 함수의 brace는 열 때 함수의 다음 라인에 내려서 쓴다. 열고 닫을 때 모두 함수 원형과 같은 레벨에 들여쓰기를 한다.

  • 함수 내부에서 작성되는 statements들은 제어문과 같은 라인에서 열고 닫을 때는 제어문과 같은 레벨로 들여쓰기 한다. if-else문은 cuddled else로 사용한다.

  • 싱글 라인 블록은 braces를 쓰지 않는다.

  • 코드 라인 수가 줄어든다는 장점이 있다.

int main(int argc, char *argv[])
{
    ...
    while (x == y) {
        something();
        somethingelse();

        if (some_error)
            do_correct(); // In K&R a single-statement block does not have braces.
        else
            continue_as_usual();
    }

    finalthing();
    ...
}

Allman(=BSD style)

배경

Eric Allman이 제안하는 스타일로 BSD 스타일로도 알려져 있다(에릭 알만이 BSD의 많은 유틸리티를 만들었기 때문). BSD KNF style과는 아예 이름에 BSD가 들어가 있을 뿐 다르다.

특징

  • brace가 제어문, 함수 원형의 다음 라인으로 온다.
  • if, else, while과 같은 조건문과 여는 parentheses 사이에 공백을 넣는다.
  • 괄호 매칭 보기가 편하고 리팩토링에 장점이 있지만 코드 길이가 길어지게 된다.
while (x == y)
{
    something();
    somethingelse();
}

finalthing();

리팩토링의 편리함 예시

while (x == y)
{
    something();
    somethingelse();
}
// for (int i=0; i < x; i++)
// while (x == y)
if (x == y)
{
    something();
    somethingelse();
}

조건부 컴파일에서도

    int c;
#ifdef HAS_GETCH
    while ((c = getch()) != EOF)
#else
    while ((c = getchar()) != EOF)
#endif
    {
        do_something(c);
    }

참고문헌

https://en.wikipedia.org/wiki/Indentation_style#Allman_style

https://www.cis.upenn.edu/~matuszek/General/JavaSyntax/parentheses.html

http://c2.com/wiki/remodel/?CuddledElseBlocks

반응형