C 코딩 스타일 가이드 - 헤더파일
- 소프트웨어 개발 및 프로젝트 관리/코딩 규칙
- 2019. 2. 20.
본 문서는 소프트웨어 개발 시 준수해야 하는 코딩 스타일을 정의하고 가이드한다.
본 문서의 가이드는 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
기타
상식적이고 일관성있게 작성한다.
코드를 수정하는 경우 잠시 주변의 코드를 살펴 그것의 스타일을 판단하고, 해당 코드와 일관성을 가지도록 작성한다.
이 스타일 가이드를 따르지 않는 기존 코드와의 일관성을 유지하기 위해 본 가이드라인을 따르지 않을 수 있다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'소프트웨어 개발 및 프로젝트 관리 > 코딩 규칙' 카테고리의 다른 글
C 코딩 스타일 가이드 - 함수 (0) | 2019.03.21 |
---|---|
C 코딩 스타일 가이드 - 주석 (0) | 2019.03.20 |
C 코딩 스타일 가이드 - 변수 범위 (0) | 2019.03.17 |
C 코딩 스타일 가이드 - 이름 규칙 (0) | 2019.03.14 |
C 코딩 스타일 가이드 - 서식 (0) | 2019.02.24 |