티스토리 뷰

IT/C, C++

Google C/C++ CodeStyle

ROGERNM 2022. 8. 12. 22:54

reference : https://google.github.io/styleguide/

 

Google Style Guides

Style guides for Google-originated open-source projects

google.github.io


구글에서 제시하는 C/C++ 코드스타일(네이밍 룰)을 알아본다

1. Class/Struct

  • Class의 이름은 Pascal Case를 사용한다.
  • Class의 멤버함수 또한 Pascal Case를 사용한다
  • Class의 멤버함수안의 일반 변수들은 Snake Case를 사용한다.
class MyClass {
 public:
  int CountFooErrors(const std::vector<Foo>& foos) {
    int total_number_of_foo_errors = 0;  // Overly verbose given limited scope and context
    for (int foo_index = 0; foo_index < foos.size(); ++foo_index) {  // Use idiomatic `i`
      ...
      ++total_number_of_foo_errors;
    }
    return total_number_of_foo_errors;
  }
  void DoSomethingImportant() {
    int cstmr_id = ...;  // Deletes internal letters
  }
 private:
  const int kNum = ...;  // Unclear meaning within broad scope
};

Class의 data member들은 underline으로 끝나야한다.

class TableInfo {
  ...
 private:
  std::string table_name_;  // OK - underscore at end.
  static Pool<TableInfo>* pool_;  // OK.
};

하지만 Struct의 data member들은 normal 한 snake case를 사용한다

struct UrlTableProperties {
  std::string name;
  int num_entries;
  static Pool<UrlTableProperties>* pool;
};

2. Normal Function and Normal Variable

Normal Function과 Normal Variable은 Class와 동일하다
일반 변수에는 Snake Case, 함수 명엔 PascalCase를 사용한다

// 함수명
AddTableEntry()
DeleteUrl()
OpenFileOrDie()

// 변수명
std::string table_name;  // OK - lowercase with underscore.
std::string tableName;   // Bad - mixed case.

3. MACRO

매크로는 전부 대문자로 사용한다.

#define ROUND(x) ...
#define PI_ROUNDED 3.0

4. File Name

파일명은 _ 혹은 -를 포함하여 전부 소문자만 사용한다.

  • my_useful_class.cc
  • my-useful-class.cc
  • myusefulclass.cc
  • myusefulclass_test.cc // _unittest and _regtest are deprecated.

5. Horizontal Whitespace

일반적인 주석 전에는 공간 2개를 사용한다. 또한 대게 괄호 전 후에는 1개의 Space를 둔다. 아래 예를 살펴보자.

int i = 0;  // Two spaces before end-of-line comments.

void f(bool b) {  // Open braces should always have a space before them.
  ...
int i = 0;  // Semicolons usually have no space before them.
// Spaces inside braces for braced-init-list are optional.  If you use them,
// put them on both sides!
int x[] = { 0 };
int x[] = {0};

// Spaces around the colon in inheritance and initializer lists.
class Foo : public Bar {
 public:
  // For inline function implementations, put spaces between the braces
  // and the implementation itself.
  Foo(int b) : Bar(), baz_(b) {}  // No spaces inside empty braces.
  void Reset() { baz_ = 0; }  // Spaces separating braces from implementation.

루프 혹은 조건문에서는 아래와 같이 사용한다. 대부분 괄호 전후로 1개의 space 공간을 둔다.

if (b) {          // Space after the keyword in conditions and loops.
} else {          // Spaces around else.
}
while (test) {}   // There is usually no space inside parentheses.
switch (i) {
for (int i = 0; i < 5; ++i) {
// Loops and conditions may have spaces inside parentheses, but this
// is rare.  Be consistent.
switch ( i ) {
if ( test ) {
for ( int i = 0; i < 5; ++i ) {
// For loops always have a space after the semicolon.  They may have a space
// before the semicolon, but this is rare.
for ( ; i < 5 ; ++i) {
  ...

// Range-based for loops always have a space before and after the colon.
for (auto x : counts) {
  ...
}
switch (i) {
  case 1:         // No space before colon in a switch case.
    ...
  case 2: break;  // Use a space after a colon if there's code after it

6. Parenthesis Position

이 부분은 해당 링크에 없는 내용인지 잘 안 보인다. 조건문 혹은 반복문에서의 괄호 위치인데 이 부분은 개발자마다 많이 갈리는 부분이다. 

아래와 같이 바로 붙여서 쓰는지 아니면 줄 바꿈을 한 후 쓰는지에 대한 차이인데.  일단 구글에서는 바로 붙여 쓰는 걸 권장하고 있는 것 같다. 

if (condition) {
	// do something...
}

for (;;) {
	// do something...
}
if (condition)
{
	// do something...
}

for (;;)
{
	// do something...
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함