Google C++ Coding Style
1. 이름 규칙
■ 일관성을 위해 가장 중요한 것은 이름 규칙을 따르는 것이다.
■ 이름의 스타일을 통해 요소의 선언을 차지 않고도 해당 요소가 타입인지, 변수인지, 함수인지, 상수인지, 혹은 매크로인지 바로 알 수 있다.
■ 개인의 선호도보다 일관성이 더 중요하다. 합리적이라고 생각하든 아니든 규칙을 지켜야 한다.
2. 일반적인 상황
■ 함수 이름, 변수 이름, 파일 이름은 약어를 사용하지 않고 서술형을 사용한다.
■ 가능한 상세하게 이름을 사용하고 타인이 즉시 이해할 수 있는 것이 글자 수 단축보다 중요하다.
■ 제 3자에게 익숙하지 않은 약어를 사용하지 않으며, 축약하지 않는다.
int Example_class; // 축약 없음 int x; // 의미 불명
int Example_error; // 이해 가능 int Emperr // 축약이 모호함
3. 파일 이름
■ 모두 소문자로 구성하고 언더바 " _ " 를 포함하여 가능하다. ex) Example_class.c
4. 디렉터리 이름
■ 모두 소문자로 구성하고 언더바 " _ " 를 포함하여 가능하다.
5. 타입 이름
■ 대문자로 시작하며, 언더바 " _ " 없이 단어마다 첫 글자를 대문자로 작성한다. 구조체, typedef, 열거형 모두 동일하다.
ex) struct ExampleFirstStruct { ...
6. 변수 이름
■ 모두 소문자로 작성하며 단어 사이에 언더바를 " _ " 사용한다. ex) int example_name;
7. 상수 이름
■ k로 시작하고 대소문자가 섞인 형태( 매 단어의 첫 글자를 대문자 ) 를 사용한다.
8. 함수 이름
■ 대문자로 시작하고 각 단어의 첫 글자를 대문자로 쓰며 언더바 " _ " 는 사용하지 않는다. ex) AddExample()
변수명 표기법의 종류
1. camelCasing : 두 개 이상의 단어로 구성된 변수명의 첫 단어는 소문자로 시작하고 나머지는 모두 대문자로 만든다.
( 낙타모양 ) ex ) : numberOfMember
2. pascalCasing : 모든 단어의 첫 글자는 무조건 대문자이다. ex) NumberOfMember
3. 헝가리안 표기법 : 변수명에 변수 타입을 명시 -[접두어]태그[기본이름[접미어]], 주로 Windows API에서 사용한다., 1999년 헝가리 출신 Microsoft 수석 아키텍트인 Charles Simonyi가 소개한 이후 15년 이상 MS가 공개한 대부분의 문서에서 이 표기법이 사용되고 ms이외의 업체에서도 이 표기법을 채택함.
변수명 표기법의 효과
개발자는 기억하기 쉽도록 암시를 내포하고 코드 리뷰어에게는 의미를 연상시키고 유사한 변수는 유사한 이름을 사용하여 코드문서의 일관성을 유지하고 규칙을 사용하여 작명시간 단축 및 타이핑 시간을 단축할 수 있다.
변수명 표기법
헝가리안 표기법(Microsoft) - [접두어]태그[기본이름[접미어]]
1. 접두어
g_ | 전역변수 | extern int g_iMax; |
m_ | 멤버변수 | private: int m_iMax; |
(없음) | 지역변수 | int max; |
2. 태그
a | 배열 | const int* aArray; |
b | BOOL형 변수 | BOOL bErased; |
by | BYTE형 변수 | BYTE byParity; |
c | 배열의 원소 수를 나타내는 변수 | size_t cCharCount; |
ch | CHAR형 변수 | CHAR chCode; |
cx, cy | x, y의 길이를 나타내는 변수 | int cx=0; |
d | 날짜형 변수 | time_t dDate; dbl |
dbl | double형 변수 | double dblRate; |
e | enum변수 | MyEnum eEnum; |
f | float형 변수 | float fRate; |
h | HANDLE형 변수 | HANDLE hwnd; |
n 또는 i | INT형 변수 | INT nMax; |
p | 근거리 포인터 (Win16에서만 유효) | near int* pInteger; |
lp | 원거리 포인터 | far int* lpInteger; |
pfn | 함수 포인터 | FARPROC pfnProc; |
rg | 고정 크기 배열 | WORD rgwArray[128]; |
prg | 동적 할당 배열 | WORD *prgwArray; |
s | 정적변수 | static int sInteger; |
sz | NULL로 끝나는 문자열 | CHAR szTest[128]; |
t | 구조체형 변수 | MyStruct dStruct |
u | UINT형 변수 | UINT uType; |
w | WORD형 변수 | WORD wType; |
dw | DWORD형 변수 | DWORD dwLength; |
str | CString형 변수 | CString strTest; |
k | const형 매개변수 | const char kcChar |
r | reference형 매개변수 | int& rInteger; |
3. 기본이름
이름의 첫 글자는 대문자로 시작
4. 접미어
추가적인 의미를 부여한다
ex) DWORD dwLengthFirst; ( 처음 ) , DWORD dwLengthIdx ( 인덱스 )
헝가리안 표기법의 예외
1. X, Y 와 같이 의미가 명확한 변수(XDest, YDest 등 ), for문 등에서 사용하는 i, j, k 등 이미 알려진 변수, 구조체 변수/멤버변수는 예외로 한다.
대문자 이름 | #define, enum, const은 대문자와 ' _ ' 사용 | #define PACKET_LOGIN 8 |
구조체 이름은 대문자와 ' _ ' 사용 | struct BANNER_UNIT{ ... } | |
소문자 이름 | 구조체 멤버변수(관습적인 이유) | BYTE type; |
'Programming > Program' 카테고리의 다른 글
Java Coding Concentions - Oracle 3 (0) | 2020.08.07 |
---|---|
Java Coding Concentions - Oracle 2 (0) | 2020.08.06 |
Java Coding Concentions - Oracle 1 (0) | 2020.07.29 |