관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

구글 C++ 코딩 스타일 가이드 본문

1. 프로그래밍/9) 기타

구글 C++ 코딩 스타일 가이드

valuecreatort 2019. 7. 23. 20:46
반응형

※ 요약

구글 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)

 

기타

상식적이고 일관성있게 작성한다.

코드를 수정하는 경우 잠시 주변의 코드를 살펴 그것의 스타일을 판단하고, 해당 코드와 일관성을 가지도록 작성한다.

 

이 스타일 가이드를 따르지 않는 기존 코드와의 일관성을 유지하기 위해 본 가이드라인을 따르지 않을 수 있다.

 

 

 

 

 

※ 링크

원문

 

Google C++ Style Guide

Background C++ is one of the main development languages used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-pr

google.github.io

번역

불러오는 중입니다...

 

※ 설명

아래는 구글 C++ 스타일이다.

 

 

아래는 번역된 사이트다.

 

반응형
Comments