일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++ API
- 수도권주택공급
- 엑스퍼트2주년
- #부동산전자거래 #부동산전자계약 #부동산계약 #부동산전자계약방법 #부동산전자계약하는법 #부동산계약방법 #부동산중개수수료 #부동산중개수수료아끼기 #부동산복비아끼기
- file read
- 프리미어 영상저장
- #신혼부부 #결혼준비 #신혼부부희망타운신혼부부특별공급
- lua setup
- meta table
- QTcpServer
- 엑스퍼트생일축하해
- 프리미어 영상변환
- lua install
- lua interpreter
- lua for windows
- FILE TRANSFER
- 중소규모택지
- 국토교통부
- 월세
- 찾다죽는줄
- object
- 티몬삼겹살데이
- Lua
- 등록임대주택
- file open
- QT TCP
- file write
- 청량리역한양수자인192
- TCP/IP
- C API
- Today
- Total
Value Creator의 IT(프로그래밍 / 전자제품)
구글 C++ 코딩 스타일 가이드 본문
※ 요약
구글 C++ 스타일 가이드를 참조하여, 이름 규칙에 관련된 C 코딩 스타일 가이드를 정의한다.
이름 규칙
일관성을 위해 가장 중요한 것은 이름 규칙을 따르는 것이다.
이름의 스타일을 통해 요소의 선언을 찾지 않고도 해당 요소가 타입인지, 변수인지, 함수인지, 상수인지, 혹은 매크로인지 바로 알 수 있다.
이름 규칙은 개인의 선호도보다 일관성이 더 중요하다. 합리적이라고 생각하든 아니든 규칙은 지켜야 한다.
일반
N-1. 함수 이름, 변수 이름, 파일 이름은 약어를 사용하지 않고 서술형으로 짓는다.
가능한 상세한 이름을 사용한다. 다른 사람이 즉시 이해할 수 있는 것이 글자 길이를 줄이는 것보다 중요하다.
제 3자에게 익숙하지 않은 약어를 사용하지 않으며, 축약하지 않는다.
// 좋은 예
int price_count_reader; // 축약 없음.
int num_errors; // 누구나 이해 가능
int num_dns_connections; // DNS 정도면 누구나 이해 가능
// 나쁜 예
int n; // 의미 없음.
int nerr; // 모호한 축약.
int n_comp_conns; // 모호한 축약.
int wgc_connections; // 내부자만 아는 약어.
int pc_reader; // pc의 의미는?
int cstmr_id; // 중간 단어 축약
파일 이름
N-2. 파일 이름은 모두 소문자로 구성하고 대시 "-" 를 포함할 수 있다.
단, 특정 프로젝트 내에서 대시 "-" 대신 언더바 "_" 를 사용하는 경우, 해당 프로젝트의 관례에 따라 언더바 "_" 를 사용할 수 있다.
// 사용 가능한 파일 이름
my_useful_class.c
my-useful-class.c
myusefulclass.c
myusefulclass_test.c
N-3. 이미 존재하는 파일 이름은 사용하지 않는다. (errno.h 등)
N-4. 파일 이름은 되도록 상세하게 짓는다.
예를 들면 http_server_logs.h가 logs.h보다 좋다.
N-5. 인라인 함수는 헤더 파일에 정의한다.
인라인 함수의 코드가 짧으면 .h 헤더 파일 안에 정의하고, 길다면 -inl.h 헤더 파일 안에 정의한다.
url_table.h // 헤더 파일
url_table.c // 모듈 파일
url_table-inl.h // 많은 코드를 포함한 인라인 함수 헤더 파일
디렉터리 이름
N-6. 디렉터리 이름은 모두 소문자로 구성하고 대시 "-" 를 포함할 수 있다.
단, 특정 프로젝트 내에서 대시 "-" 대신 언더바 "_" 를 사용하는 경우, 해당 프로젝트의 관례에 따라 언더바 "_" 를 사용할 수 있다.
타입 이름
N-7. 타입 이름은 대문자로 시작하며, 언더바 "_" 없이 단어마다 첫 글자를 대문자로 작성한다.
구조체, typedef, 열거형을 포함한 모든 타입에 대해 동일한 규칙이 적용된다.
// 구조체
struct UrlTablePropertiesStruct {
...
}
// typedef
typedef struct UrlTablePropertiesStruct * UrlTableProperties;
// 열거형
enum {
...
} eUrlTableErrors;
변수 이름
N-8. 변수 이름은 모두 소문자로 작성하며 단어 사이에 언더바 "_" 를 사용한다.
지역변수, 전역변수, 구조체 멤버 변수 모두 동일하다.
int table_name; // 좋음 - 언더바 사용
int tablename; // 좋음 - 모두 소문자
int tableName; // 불가 - 대문자 사용
N-9. 전역변수는 "g_" 와 같이 지역 변수와 구분할 수 있는 접두어를 사용한다.
int g_table_num;
상수 이름
N-10. 상수 이름은 k로 시작하고, 대소문자가 섞인 형태(매 단어의 첫 글자를 대문자)를 사용한다.
const int kDaysInAWeek = 7;
함수 이름
N-11. 함수 이름은 대문자로 시작하고 각 단어의 첫 글자를 대문자로 쓰며, 언더바 "_" 는 사용하지 않는다.
함수의 실행 중 크래시가 발생할 수 있다면 함수의 이름 뒤에 OrDie 를 붙인다.
AddTableEntry()
DeleteUrl()
OpenFileOrDie()
열거형 이름
N-12. 열거형 이름은 접두어 "e"를 붙이고, 각 단어의 첫 글자를 대문자로 쓰며 언더바 "_" 는 사용하지 않는다.
열거형 정의 코드 바로 밑에 해당 열거형의 변수 타입 및 이름을 재지정(typedef)하고, 코드 상에서는 재 지정된 열거형 이름을 사용한다.
각 열거형 값은 상수 이름 형식으로 작성하며, 필요 시 공통접두어와 각 값의 의미 구문을 언더바 "_"로 구분할 수 있다.
enum eResultCode {
kResultSuccess,
kResultFail
};
typedef uint16_t ResultCode;
enum eStatusCode {
kStatus_Init,
kStatus_Run
};
typedef int StatusCode;
매크로 이름
N-13. 일반적으로 매크로는 사용하지 않는 것이 좋다. 하지만 꼭 필요하다면 대문자와 언더바 "_" 만 사용한다.
매크로보다는 인라인함수, 열거형, const 변수를 사용한다.
#define ROUND(x) ...
#define PI_ROUNDED 3.0
이름 규칙의 예외
N-14. 표준 기술을 구현하는 경우, 해당 표준 문서 상의 표현과 통일성을 갖기 위해 문서 상에 정의된 이름/형태를 그대로 사용할 수 있다.
// 표준에 정의된 프리미티브 형식
DATA-TX.request {
Data,
Length
}
// 구현
DATA_TX_request (char *Data, int Length)
기타
상식적이고 일관성있게 작성한다.
코드를 수정하는 경우 잠시 주변의 코드를 살펴 그것의 스타일을 판단하고, 해당 코드와 일관성을 가지도록 작성한다.
이 스타일 가이드를 따르지 않는 기존 코드와의 일관성을 유지하기 위해 본 가이드라인을 따르지 않을 수 있다.
※ 링크
※ 설명
아래는 구글 C++ 스타일이다.
아래는 번역된 사이트다.
'1. 프로그래밍 > 9) 기타' 카테고리의 다른 글
우분투 시리얼 포트 접근 권한 얻기 (1) | 2019.09.02 |
---|---|
우분투 LTS 12.04 한글 사용하기 (0) | 2019.08.21 |
[C++] Class, Object, Instance (클래스, 객체, 인스턴스) (1) | 2019.07.23 |
#4 #ifndef, #ifdef란?(전처리문. #include, #define…) (0) | 2019.06.25 |
#2 Visual Studio에 헤더 파일, 외부 라이브러리 추가하기 (0) | 2019.04.18 |