강좌 & 팁
변경된 내용
탭 크기를 공백 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 |
- 상수는 모두 대문자와 밑줄(언더 바)을 이용한다.
BUFFER_SIZE, WIDTH_MAX, USER_CAPTON - 함수와 변수는 모두 소문자와 밑줄을 이용한다.
show_message(), bmp_filename, hide() - 광역 변수 명명법
- 라이브러리 제공 광역 변수
라이브러리에서 제공되는 광역변수는, 어떤 라이브러리에서 제공하는지 알 수 있는지, 라이브러리의 축약 접두사를 사용합니다.예)
int gx_nerror_code; // gx 그래픽 라이브러리에서 제공 int rs_nerror_code; // rs 시리얼 라이브러리에서 제공
- 프로젝트 내에서 사용하는 광역 변수
프로젝트 대표 접두사를 사용예)
int ibs_nerror_code; // 빌딩 자동화 프로젝트에서 사용하는 광역변수
- 라이브러리 제공 광역 변수
- 일반 변수 명명법
변수 이름 앞에 아래와 같이 정의된 접두사를 붙여 명명합니다.
변수 타입 접두사 접두사 때문에 변수 이름 읽기가 힘들다면 접두사에 밑줄을
추가할 수 있다.int n short w long l char c char * pc 또는 p short * pw 또는 p long * pl 또는 p FILE * pf 또는 p 사용자 정의 스트럭쳐 대표 접두사+밑줄
예) bmp_background사용자 정의 스트럭쳐 * p+대표 접두사+밑줄
예) pbmp_backgroundlong * pl 또는 p - 함수 명명법
- 라이브러리 제공 함수
어떤 라이브러리에서 제공되는 함수인지, 라이브러리의 축약 접두사를 사용합니다.예)
int gx_error_sring(); // gx 그래픽 라이브러리에서 제공 int rs_open(); // rs 시리얼 라이브러리에서 제공
- 프로젝트 내에서 사용하는 함수
프로젝트 대표 접두사를 사용예)
int ibs_show_message( "종료합니다."); // 빌딩 자동화 프로젝트에서 사용하는 광역변수
- 라이브러리 제공 함수
- 블록 들여쓰기는 아래와 같이 블록의 시작과 종료 문자를 블록의 시작에 위치합니다.
if ( ) { } else { } for () { } while () { } - 탭 문자 크기를 공백 문자 4개로 한다.
- 탭 문자를 사용하지 않는다. 들여쓰기는 모두 공백 문자를 이용한다.
- 모듈 별 주석 달기(소스 상단의 전체 주석)
/* */를 사용하며, /*****.....**** 의 마지막 별은 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() 값 ********************************************************************************/ - 함수별 주석 달기
함수 이름 밑에 '//' 주석 문을 사용하며, 설명, 참고, 인수, 반환을 입력한다. 작성할 내용이 없으면 생략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); - 함수 내부 주석 달기
// 와 /* */ 두 가지 모두 사용한다.: 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; : - 행별 주석 달기
80 열에 // 코드로 주석을 삽입한다. 80 열인 이유는 탭 문자에 대해 공백문자 4개를 이용하기 때문입니다. - if 절 작성 예
if 절의 조건 문은 한 행에 한 개씩 작성한다.if ( ( 0 == a) // a 가 0 이거나 --> 주석의 시작은 40열 또는 80열 ¦¦ ( 0 == b) // b 가 0 ¦¦ ( 0 == c)) // 또는 c 가 0 이면 { 내용 처리 } - for 절 작성 예
for 블록의 내용이 길어 질 때에는 종료 } 문자 뒤에 루프의 변수명으로 이해를 도울 수 있다.for ( ndx = 0; ndx < 10; ndx++) { for ( jdx = 0; jdx < 10; jdx++) { for ( kdx = 0; kdx < 10; kdx++) { 루프 처리 } // kdx } // jdx } // ndx - 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; }


