Header Files

일반적으로 모든 .cc 파일에는 연관된 .h 파일이 있어야 한다.

  • 단, 유닛 테스트 및 main() 함수만 포함하는 작은 .cc 파일과 같은 예외가 있음

헤더 파일을 올바르게 사용하면 코드의 가독성, 사이즈 및 성능 면에서 큰 차이를 가져올 수 있다.

Self-contained Headers

모든 헤더 파일은 독립적(self-contained)이어야 한다.

  • 여기서 독립적이란, abc.h, abc.cpp따로 파일을 만들어야 한다는 의미이다.
  • 단, template, inline function 에 대한 정의는 선언과 동일한 파일에 배치하는 걸 선호

The #define Guard

모든 헤더 파일에는 다중 포함을 방지하기 위해 #define 이 있어야 한다.

기호 이름의 형식은 PROJECT_PATH_FILE_H_ 여야 한다.

고유성을 보장하려면 프로젝트 소스 트리의 전체 경로를 기반으로 해야 한다.

예를 들어, foo 프로젝트의 foo/src/bar/baz.h 파일에는 아래와 같이 작성한다.

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_

...

#endif // FOO_BAR_BAZ_H_

Include What You Use

소스 또는 헤더 파일이 다른 곳에 정의된 기호를 참조하는 경우, 파일에는 해당 기호의 선언 또는 정의를 적절하게 제공하려는 헤더 파일이 직접 포함되어야 한다.

즉, 전이적 포함(transitive inclusion)에 의존하면 안된다.

//foo.h
#include "bar.h"
class Foo 
{
public:
    Bar bar;
};
//bar.h
class Bar
{
};
//foo.cc
#include "foo.h"
// #include "bar.h"
int main()
{
    Foo* foo = new Foo();
    Bar* bar = new Bar();
}
  • foo.h 가 bar.h를 포함하기에 .cc 파일에서 foo.h 만 포함하려는 시도

Forward Declaration

가능하면 전방 선언을 사용하지 않는다.

  • 대신 필요한 헤더 파일을 포함해야 함
  • C++ 20 부터는 모듈 시스템의 도입으로 문제점이 완화되었음

Inline Functions

10줄 이하의 함수는 인라인으로 정의한다.

  • loop 또는 switch 의 경우 효율적이지 않음
  • 재귀 함수는 인라인으로 지정하지 않음

Names and Order of Includes

다음의 순서로 포함한다 :
관련 헤더, C 시스템 헤더, C++ 표준 라이브러리 헤더, 기타 라이브러리 헤더, 프로젝트 헤더
프로젝트의 모든 헤더 파일은 UNIX 디렉터리 별칭 .(현재 디렉터리) 또는 ..(상위 디렉터리)를 사용하지 않고 프로젝트 소스 디렉터리의 하위 항목으로 나열되어야 한다.

  • 예시 1. google-awesome-project/src/base/logging.h 는 다음과 같이 포함되어야 한다.

    #include "base/logging.h"
  • 예시 2. google-awesome-project/src/foo/internal/fooserver.cc는 다음과 같을 수 있다:

    #include "foo/server/fooserver.h"
    
    #include <sys/types.h>
    #include <unistd.h>
    
    #include <string>
    #include <vector>
    
    #include "base/basictypes.h"
    #include "base/commandlineflags.h"
    #include "foo/server/bar.h"
  • 예외 1. 조건부 포함

    #include "foo/public/fooserver.h"
    
    #include "base/port.h"  // For LANG_CXX11.
    
    #ifdef LANG_CXX11
    #include <initializer_list>
    #endif  // LANG_CXX11

https://google.github.io/styleguide/cppguide.html

 

Google C++ Style Guide

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 ca

google.github.io

 

라떼썰 같은 꼰대 이야기일지 모르겠으나...
Code convention을 숙지하는 것은 협업의 시작이다.

 

보통 3개월인 수습 기간 동안 숙지할 것을 권장하며

수습이 끝난 후에는 프로젝트 코드에 가장 얕은 권한이 주어진다.

그리고 pull request, code review 를 거치며 코딩 스타일을 체득한다.

 

2022년 chatGPT 이후, 일단 구현해보자가 흐름이라면

앞으로의 이야기는 흐름을 거스른다고 느낄 수도 있겠다.

 

구글 스타일 가이드를 모두 번역할 계획보다는

정말로 필요한 부분만 번역해서 업로드할 계획이다.

 

1. Header Files

2. Scoping

3. Classes

4. Functions

5. Naming

6. Comments

7. Formatting

작년에 다녀온 예비군훈련에 다녀왔다.

해당일에 회사에 예비군 훈련으로 인한 휴가를 신청했기에 확인증이 필요했다.

 

확인증으로 인정되는 예비군훈련 교육 필증은 정부24 홈페이지에서 무료로 온라인 발급이 가능하다.

로그인은 디지털원패스, 인증으로 금융인증서가 편하다.

로그인을 하고 예비군훈련을 검색하여 서비스 바로가기를 클릭한다.

정부24 검색창 (2024.5.10)

 

발급하기를 눌러준다.

 

그리고 이름과 주민번호, 편성 훈련을 선택하고 민원신청하기를 누른다.

 

 

이제 서비스 신청내역에서 처리상태가 처리완료가 될 때까지 기다린다.

보통은 바로 처리되어 처리완료된다.

문서 출력을 클릭한다.

이어서 인쇄할 수 있는 미리보기 화면이 나온다.

이틀전 예비군 훈련을 갔을때 군번을 몰라서 비워놨었는데 군번이 나와있어 다른 곳에 옮겨적었다.

예정대로라면 4년차인 올해까지는 사흘간 출퇴근으로 동미참훈련을 가야했다.

박사과정(파트) 진학이후 학생 예비군으로 분류되어 당일치기로 훈련을 받았다.

+ Recent posts