반응형

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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기