변경된 내용

탭 크기를 공백 3자에서 4자로

표준 코딩 0.0.3 입니다. 0.0.3의 가장 큰 변화는 탭 크기를 공백 3자에서 4자로 변경한 것입니다. 이전 버전까지 탭 크기를 3자로 한 것은, 저의 파스칼 코딩 습관에 따른 것으로 C에서는 공백 3 자 보다는 4자가 코딩에 더욱 유리하다는 의견을 많이 주셔서 4자로 변경하게 되었습니다.

if 절의 조건이 하나 일 때에는 관계없습니다만, 조건이 여러 개일 경우에는 하나의 행에 하나의 조건을 작성하는 것이 가독성이 좋습니다. 이럴 때 tab 크기가 3자이면 아래와 같이 조건절의 위치를 쉽게 맞출 수 있습니다.

그러나 불만의 말씀은 for()문과의 조화입니다. 탭 크기를 공백 3으로 한다면 for 문의 괄호가 for에서 공백없이 ( 문자를 붙여 써야 하는데, 이는 구문과 괄호를 띄워 쓰기와 띄워 쓰지 않는 경우가 생겨서 공통점을 갖출 수 없다는 문제가 생깁니다. 즉, 아래와 같이 말이죠.

if (  ( 0 == a)
   ¦¦ ( 0 == b)
   && ( 0 == c) )
{
   내용 처리
}

for( ndx = 0; ndx > 10; ndx++)
{
   for( jdx = 0; jdx > 10; jdx++)
   {
      내용 처리
   }
}

그래서 아래와 같이 탭 문자를 공백 4자로 바꾸면 if 절에 공백이 하나씩 더 생기지만 for () 구문과 아울러 가독성이 높다는 것을 알 수 있었습니다.

if  (   ( 0 == a)
    ¦¦  ( 0 == b)
    &&  ( 0 == c) )
{
    내용 처리
}

for ( ndx = 0; ndx < 10; ndx++)
{
    for ( jdx = 0; jdx < 10; jdx++)
    {
        for ( kdx = 0; kdx < 10; kdx++)
        {
            루프 처리
        }
    }
}

이와 같은 이유로 탭 크기를 공백 3자에서 4자로 변경합니다.

주석의 줄 라인 크기를 82 컬럼으로 조정

탭 크기를 공백 3자에서 4자로 수정했으므로 모듈 별 상단에 배치하는 주석이나 함수 이름 밑에 라인으로 긋는 주석 행의 크기를 81 컬럼에서 80 컬럼으로 조정합니다.

추가된 내용

if, for, switch 구문에 대한 코딩 예제를 추가했습니다. 내용을 참고하여 주십시오.

 

 

포럼 표준 코딩 0.0.3
  1. 상수는 모두 대문자와 밑줄(언더 바)을 이용한다.
    BUFFER_SIZE, WIDTH_MAX, USER_CAPTON

  2. 함수와 변수는 모두 소문자와 밑줄을 이용한다.
    show_message(), bmp_filename, hide()

  3. 광역 변수 명명법
    1. 라이브러리 제공 광역 변수
      라이브러리에서 제공되는 광역변수는, 어떤 라이브러리에서 제공하는지 알 수 있는지, 라이브러리의 축약 접두사를 사용합니다.

      예)

      int      gx_nerror_code;          // gx 그래픽 라이브러리에서 제공
      int      rs_nerror_code;          // rs 시리얼 라이브러리에서 제공
    1. 프로젝트 내에서 사용하는 광역 변수
      프로젝트 대표 접두사를 사용

      예)

      int      ibs_nerror_code;         // 빌딩 자동화 프로젝트에서 사용하는 광역변수
      

  4. 일반 변수 명명법
    변수 이름 앞에 아래와 같이 정의된 접두사를 붙여 명명합니다.
    변수 타입 접두사
    접두사 때문에 변수 이름 읽기가 힘들다면 접두사에 밑줄을
    추가할 수 있다.
    int n
    short w
    long l
    char c
    char * pc  또는 p
    short * pw 또는 p
    long * pl 또는 p
    FILE * pf 또는 p
    사용자 정의 스트럭쳐 대표 접두사+밑줄
    예) bmp_background
    사용자 정의 스트럭쳐 * p+대표 접두사+밑줄
    예) pbmp_background
    long * pl 또는 p



  5. 함수 명명법
    1. 라이브러리 제공 함수
      어떤 라이브러리에서 제공되는 함수인지, 라이브러리의 축약 접두사를 사용합니다.

      예)

      int      gx_error_sring();        // gx 그래픽 라이브러리에서 제공
      int      rs_open();               // rs 시리얼 라이브러리에서 제공


    1. 프로젝트 내에서 사용하는 함수
      프로젝트 대표 접두사를 사용

      예)

      int ibs_show_message( "종료합니다.");   // 빌딩 자동화 프로젝트에서 사용하는 광역변수
      
    주의!!
    • 단, static 으로 정의된 모듈 내부 함수는 접두사를 생략합니다.

  6. 블록 들여쓰기는 아래와 같이 블록의 시작과 종료 문자를 블록의 시작에 위치합니다.
    if ( )
    {
    }
    else
    {
    }
    for ()
    {
    }
    while ()
    {
    }
            


  7. 탭 문자 크기를 공백 문자 4개로 한다.

  8. 탭 문자를 사용하지 않는다. 들여쓰기는 모두 공백 문자를 이용한다.

  9. 모듈 별 주석 달기(소스 상단의 전체 주석)
    /* */를 사용하며, /*****.....**** 의 마지막 별은 80 열까지 배열한다.
    /********************************************************************************  80컬럼까지 긋는다.
     모  듈 : tcp/udp 소켓 사용
     작성자 : 장길석
     버  전 : 0.0.2
     설  명 : netrx 를 위한 tcp/udp 소켓 사용함수 정의 
     참  고 :
     
              1. tcp 는 서버 모드로 설정한다.
              2. udp 는 상대 PC 로 전송하기 위한 IP 를 처음에
                 가질 수 없기 때문에 따로 상대 PC IP 를 지정하여
                 전송에 사용한다.
                 
                 ip_sock_t 에서 to_ip, to_addr
    
     버  전:
             0.0.1  tcp/udp 처리를 하나로 묶음
             0.0.2  udp 소켓을 위해 ip_sock_t 에 to_addr 과 to_ip 추가
                    to_ip   : string    목적지 ip
                    to_addr : in_addr_t 목적지 ip 에 대한 inet_addr() 값
    ********************************************************************************/
          

  10. 함수별 주석 달기
    함수 이름 밑에 '//' 주석 문을 사용하며, 설명, 참고, 인수, 반환을 입력한다. 작성할 내용이 없으면 생략
    dc_t *gx_get_buffer_dc( int width, int height)
    // ------------------------------------------------------------------------------ 80컬럼까지 긋는다.
    // 설명: 화면 출력을 빠르게 하기 위한 버퍼 DC를 구함.
    // 참고: BitBlt를 빠르게 처리하기 위해 DC Type를 DCTYPE_SCREEN으로 지정한다.
    // 인수: width       버퍼의 폭
    //       height      버퍼의 높이
    // 반환: 버퍼 Device Context 핸들
    {
       int   szStruct;
       dc_t  *dc;
    
       szStruct = sizeof( dc_t);
          

  11. 함수 내부 주석 달기
    // 와 /* */ 두 가지 모두 사용한다.
                        :
    dc->release_dc       = release_buffer_dc;
    dc->bits_per_pixel= gx_fb.bits_per_pixel;   
    
    // 칼라 깊이에 따라 라인 별 소요되는 바이트를 계산하며,
    // 깊이에 따른 가상 함수를 지정한다.
    
    switch( gx_fb.colors)
    {
    case 1   :  dc->bytes_per_line  = width / 8;
                        :
          

    또는

                        :
    dc->release_dc       = release_buffer_dc;
    dc->bits_per_pixel= gx_fb.bits_per_pixel;   
    /*
     * 칼라 깊이에 따라 라인 별 소요되는 바이트를 계산하며,
     * 깊이에 따른 가상 함수를 지정한다.
     */
    switch( gx_fb.colors)
    {
    case 1   :  dc->bytes_per_line  = width / 8;
                        :
          

  12. 행별 주석 달기
    80 열에 // 코드로 주석을 삽입한다. 80 열인 이유는 탭 문자에 대해 공백문자 4개를 이용하기 때문입니다.

  13. if 절 작성 예
    if 절의 조건 문은 한 행에 한 개씩 작성한다.

    if  (   ( 0 == a)                   // a 가 0 이거나        --> 주석의 시작은 40열 또는 80열
        ¦¦  ( 0 == b)                   // b 가 0 
        ¦¦  ( 0 == c))                  // 또는 c 가 0 이면
    {
        내용 처리
    }
    
  14. for 절 작성 예
    for 블록의 내용이 길어 질 때에는 종료 } 문자 뒤에 루프의 변수명으로 이해를 도울 수 있다.

    for ( ndx = 0; ndx < 10; ndx++)
    {
        for ( jdx = 0; jdx < 10; jdx++)
        {
            for ( kdx = 0; kdx < 10; kdx++)
            {
                루프 처리
            } //  kdx
        } // jdx
    } // ndx
    
  15. switch 절 작성 예
    swicth의 case 구문을 switch 컬럼에 맞추며, case 내의 블록은 조건 내용에서 탭 하나를 들여 작성한다.

    swicth ( ch_input)
    {
    case 'f':
            printf( "forum.falinux.comn");
            break;
    case 'z':
            printf( "www.falinux.comn");
            break;
    case 'j':
            printf( "jwmx.tistory.comn");
            break;
    }