source reading(1)
매뉴얼을 읽자 : infogcc
Reference Manual
- source/document
컴파일러 warning 레벨을 최대로 높임.
- warning 없애야함. (커멘트)
소스를 잘 볼 수 있는 툴이 필요 ex)emacs, 이클립스등.
정적분석도구 : malloc <-> free찾음.
관찰
Blocking/Non Blocking(임베디드에서는 중요)
nonblocking일경우
ex) fcntl
event driven으로 작성.
메모리 사용을 확인
malloc <-> free찾음
하드웨어를 이해해야함.
- 하드웨어 매뉴얼을 봐야함.
코딩규칙
- 모든 파일명에 특수문자금지
- case insensitive
한 라인에 최대 글자수 제한 : 80 ~ 132
함수의 라인수 제한 : 50~100라인 (2페이지 이내)
fixed size 폰트 사용
탭문자사용규칙(4 space or 8 space로 바꾸어 사용. 탭문자 사용하지 말것)
헤더파일
#ifndef _????_?_
#define _????_?_
...
#endif
프로젝트 초반에는 헤더파일 안에 사용하는 헤더파일들을 나열하고 그걸 include
디렉터리를 사용. (모두 다 영어)
주석
프로그램을 잘 설명하는 것은 주석이 아니라 소스다
코드의 주요 Section 앞에는 comment 블록을 둔다. <=> Doxygen(주석을 문서화하는 프로그램)
변수
변수 이름을 잘 짓자. (31글자 이내의 변수를 사용)
scope에 상관없이 모든 변수명은 다르게
global변수는 한 곳에서만 선언.
변하지 않는 변수는 const사용.
멀티쓰레드 프로그램은 변하는 공유변수는 volatile 선언.(커널 코드에 중요)
명시적인 type사용.
double, float을 사용할 때 표준을 확인(컴파일러 cpu마다 결과가 다름.)
8진수 사용금지
연산의 중간 결과가 허용된 크기를 넘는지 확인(변수의 최대/최소값 주의)
type casting
불필요한 type casting 자제.
데이터 손실 주의
포인터 type과 다른 type 사이의 변환 금지
포인터
2중포인터 사용 자제
포인터끼리 연산 금지
함수포인터 자제
local변수에 대한 포인트 자제
MACRO
대문자 사용
function macro보다는 진짜 function사용
inline function을 사용(macro같은)
enable 1, disable 0같이 상식적 사용
#undef사용 자제
#pragma를 사용할 때는 반드시 문서화
- 2의 승수로 structure 사용. (하드웨어 dependency때문에 pragma사용)
macro 에서 return, goto, continue, break는 자제
함수용 macro에서 괄호 반드시 사용
*문장형 macro는 중괄호 대신 do... while사용.