C 코딩 스타일 가이드 - 헤더파일

반응형

본 문서는 소프트웨어 개발 시 준수해야 하는 코딩 스타일을 정의하고 가이드한다.

본 문서의 가이드는 C 언어를 대상으로 하고 있으며 C99 표준이 적용된다(추후 C11 등 최신 표준으로 변경 적용 가능하며, 이에 따라 본 문서의 내용이 일부 변경될 수 있다).

본 문서의 가이드는 구글 C++ 코딩 스타일 가이드(https://google.github.io/styleguide/cppguide.html)를 기반으로 내부적인 필요에 따라 일부 내용을 수정, 변경하여 적용한 것이다.

 

헤더파일

헤더파일을 바르게 사용하는 것으로 코드의 가독성과 크기, 성능에 큰 차이를 만들 수 있다.

 

#define 가드

H-1. 헤더파일이 중복 포함되는 것을 방지하기 위해, 모든 헤더파일 내에 #define 가드를 사용한다. 

#define 가드의 형식은 <PROJECT>_<PATH>_<FILE>_H_ 이며, <PATH>는 프로젝트 소스 디렉터리로부터의 하위경로로 표시된다.

// foo/src/bar/baz.h


#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_

#endif // FOO_BAR_BAZ_H_

 

 

인라인 함수

H-2. 10 줄 이하이면서 for, while, switch 문을 포함하지 않은 함수만 인라인 함수로 정의한다.

 

-inl.h 파일

H-3. 복잡한 인라인 함수의 정의로 인해 헤더파일이 지저분해 질 경우, 인라인 함수만 정의하는 -inl.h 접미어가 붙은 헤더파일을 추가로 사용한다.

 

 

함수 인자 순서

H-4. 함수의 인자는 입력 인자, 입출력 인자, 출력 인자 순서로 정의한다. 

단순히 새로운 변수라고 해서 가장 뒤에 추가하지 않는다.

단. 관련된 함수들과의 일관성을 위해 이 규칙을 따르지 않을 수 있다.

 

include 형식

H-6. 시스템 라이브러리 및 다른 라이브러리의 헤더파일을 include 할 때에는 "<", ">"를 사용한다.

 

H-7. 현재 프로젝트의 헤더파일을 include 할 때에는 쌍 따옴표(")를 사용한다.

 

H-8. 모든 프로젝트 헤더파일은 현재 디렉터리 기준의 상대경로 ".", ".."  를 사용하지 않고, 프로젝트 소스 디렉터리 기준의 하위 경로로 표시한다.

예: google-awesome-project/src/base/logging.h는 다음과 같이 #include 된다.

#include "base/logging.h"

 

include의 순서

H-9. include하는 헤더파일의 순서는 1) 시스템 라이브러리의 헤더파일(들), 2) 다른 라이브러리의 헤더파일(들), 3) 현재 프로젝트의 헤더파일(들)의 순서로 구역을 나누어 작성하며, 각 구역 내 헤더파일의 순서는 알파벳 순서를 따른다.

이를 통해 가독성을 높이고 숨겨진 종속성을 피할 수 있다.

 

예: google-awesome-project/src/foo/internal/fooserver.c

// 1) 시스템 라이브러리
#include <sys/types.h>
#include <unistd.h>

// 2) 다른 라이브러리
#include <other_libs.h>

// 3) 현재 프로젝트
#include "base/basictypes.h"
#include "base/commandlineflags.h"
#include "foo/public/bar.h"

 

예외: (시스템 의존적인) 조건부 include는 가장 아래에 작성한다.

#include "base/port.h"  // LANG_CXX11를 위해

#ifdef LANG_CXX11
#include <initializer_list>
#endif  // LANG_CXX11

 

기타

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

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

 

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

 


 

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글

Designed by JB FACTORY