카테고리 없음

C언어 프로그래밍 스타일에 관하여...

카카오블로거 2021. 12. 30. 20:10

프로그래머에 따라 코딩 스타일은 다양하며, 보통 2~4가지의 코딩 스타일이 있습니다.

현재 본인의 코딩 스타일은 무엇이며, 어떤 스타일이 좋을 지 생각해 보기 바랍니다.

[A 스타일 - 공백 주기]

if( i == 5 )

{

}

- if문의 소괄호 '('와 i 사이에 공백이 있다.

- i와 == 사이에 공백이 있다.

- 5와 소괄호 ')' 사이에 공백이 있다.

- 중괄호 {}가 같은 열에 위치한다.

- 코드가 한 눈에 들어오며, 단축키 Ctrl+']'에 의해 중괄호의 쌍을 쉽게 찾을 수 있다.

[B 스타일]

if(i==5){

}

- 전혀 공백이 존재하지 않는다.

- 중괄호가 하나는 뒤에 있고, 다른 하나는 앞에 있다.

- 문장의 구분이 없으므로 직관적인 해석이 어려우며, 중괄호가 위치한 열이 맞지 않는다. 중괄호가

  위치한 열이 맞지 않을 때, 중괄호 내에 많은 문장이 존재할 경우 단축키 Ctrl+']'에 의해 중괄호의 쌍을 찾기가 어렵다.

[A 스타일 - 문장간 공백 주기]

int i = 5;

int j = 7;

 

printf( "%d", i , j );

- 변수의 정의와 printf() 함수 사용 시에 공백 줄이 존재한다.

- 변수의 정의 부분과 함수 호출 부분이 공백줄로 구분되어 있으므로, 문장 구분이 쉽고 유지 보수가 용이하다.

[B 스타일]

int i = 5;

int j = 7;

printf( "%d", i , j );

- 변수의 정의와 printf() 함수 사용 시에 공백 줄이 존재하지 않는다.

- 코딩이 길어질 경우, 문장의 구분이 어려워지며, 유지보수 시간이 오래 걸린다.

[A 스타일 - if문]

if( i == 5 )

{

    break;

}

- 중괄호 블록이 존재한다.

- if문의 범위가 확실해 진다.

- 디버깅 시 중괄호 사이에 추가 문장 삽입이 쉽다.

[B 스타일]

if( i == 5 )

    break;

- 중괄호 블록이 존재하지 않는다.

- if문의 범위가 한 줄로 한정되며, 잘못하면 오류를 발생시킬 수 있다.

- 디버깅 시 중괄호를 사용한 후, 디버깅 문장을 추가해야 한다.

- 단, B 스타일을 사용하는 것이 그리 나쁘지는 않다.

[A 스타일 - 대입문]

i       = 5;

value = 9;

cnt    = 8;

- 대입 연산자를 정렬시킨다.

- 코드가 한 눈에 들어온다.

[B 스타일]

i=5;

value=9;

cnt=8;

- 대입 연산자를 정렬시키지 않는다.

- 코드의 가독성이 떨어진다.

- 변수와 상수의 구분이 어렵다.

[A 스타일 - 함수 호출]

printf( "%d", a, b, c );

- 함수와 매개 변수 사이에 공백이 존재한다.

- 매개 변수 사이에 공백이 존재한다.

- 코드의 가독성이 좋다.

[B 스타일]

printf("%d",a,b,c);

- 함수와 매개 변수 사이에 공백이 존재하지 않는다.

- 매개 변수 사이에 공백이 존재하지 않는다.

- 코드의 가독성이 좋지 않다.

[A 스타일 - 변수 정의]

int   i, j, k;

- 변수 사이에 공백이 존재한다.

- 변수의 구분이 쉽다.

[B 스타일]

int   i,j,k;

- 변수 사이에 공백이 존재하지 않는다.

- 변수의 구분이 어렵다.

[A 스타일 - if, else if에서의 중괄호 사용]

if( a )

{

    call1();

}

else if( b )

{

    call2();

    call3();

}

- if문과 else if문이 모두 중괄호를 사용하는 공통된 형태를 갖는다.

- 문장 이해 속도가 빠르다.

[B 스타일]

if( a )

    call1();

else if( b )

{

    call2();

    call3();

}

- if문은 중괄호가 없고, else if문은 중괄호가 있다.

- if문과 else if문이 연관된 문장처럼 보이지 않음으로 인해, 해석 속도가 느려진다.

[A 스타일 - for문에서 중괄호 사용]

for( i=0; i<5; i++ )

{

    call1();

}

 

call2();

- for문의 순환 범위를 한 눈에 알 수 있다.

- 프로그램의 흐름 파악이 용이하다.

[B 스타일]

for( i=0; i<5; i++ )

    call1();

call2();

- for문이 얼마큼 순환하는지 직관적이지 않다.

- call2() 함수까지 호출되는 것으로 착각하기 쉽다.

[A 스타일 - 주석 달기]

bool bStart;        // 시작되었으면 true, 그렇지 않으면 false

int    nValue;      // 값을 저장

- 주석을 달 때 문장과 적당히 공백을 띄운다.

- 주석 표시 "//" 다음에 공백을 한 칸 준다.

- 위와 아래 주석의 열을 정렬한다.

- 코드가 아름답다.

 

[B 스타일]

bool bStart; //시작되었으면 true, 그렇지 않으면 false

int    nValue; //값을 저장

- 주석을 달 때 문장과 너무 붙어 있다.

- 주석을 문장 바로 옆에 붙여서 달었다.

- 주석을 정렬하지 않았다.

- 코드가 아름답지 못하다.

[A 스타일 - 수비적인 코딩]

char * pBuff;       // 쓰레기 값으로 초기화

 

pBuff = NULL;      // NULL로 초기화

 

if( !pBuff )

{

    pBuff = new char[100];

}

- pBuff를 NULL로 초기화한다.

- 포인터는 항상 NULL로 초기화하여 쓰레기 값으로 초기화되는 것을 방지해야 한다.

 

[B 스타일]

char * pBuff;       // 쓰레기 값으로 초기화

 

if( !pBuff )           // pBuff가 쓰레기 값이므로, 조건이 거짓이되어 엉뚱한 실행 결과 발생

{

    pBuff = new char[100];

}

- pBuff를 NULL로 초기화한다.

- 포인터를 NULL로 초기화하는 습관을 갖지 않으면, 항상 이와 같은 버그에 시달리게 된다.

 

앞으로 생각나는데로 조금씩 추가해 보겠습니다.

즐 ~ 프 ~