헤더 파일에 절대 포함해서는 안되는 것은 무엇입니까?
예를 들어, 상수가 많은 문서화 된 산업 표준 형식으로 작업하는 경우 헤더 파일로 해당 형식을 정의하는 것이 좋습니다 (해당 형식의 구문 분석기를 작성하는 경우)?
헤더 파일에는 어떤 기능이 들어가야합니까?
어떤 기능을 사용해서는 안됩니까?
헤더 파일에 절대 포함해서는 안되는 것은 무엇입니까?
예를 들어, 상수가 많은 문서화 된 산업 표준 형식으로 작업하는 경우 헤더 파일로 해당 형식을 정의하는 것이 좋습니다 (해당 형식의 구문 분석기를 작성하는 경우)?
헤더 파일에는 어떤 기능이 들어가야합니까?
어떤 기능을 사용해서는 안됩니까?
답변:
헤더에 넣을 내용 :
#include
헤더가 일부 소스 파일에 포함 된 경우 헤더를 컴파일 할 수 있도록하는 데 필요한 최소 지시문 세트입니다 .헤더에 속하지 않는 것 :
#include
지시. 이러한 무관심은 재 컴파일 할 필요가없는 것들의 재 컴파일을 야기하며 때때로 시스템이 컴파일 할 수 없도록 만들 수 있습니다. #include
헤더 자체에 다른 헤더 파일이 필요하지 않은 경우 헤더에 파일을 넣지 마십시오 .#include
하거나 변경 될 수 있거나 너무 큰 함수의 인라인 정의 . 이러한 인라인 함수는 팬 아웃이 거의 없어야하며 팬 아웃이있는 경우 헤더에 정의 된 항목으로 현지화되어야합니다.최소한의 #include
진술은 무엇입니까?
이것은 사소한 질문으로 판명되었습니다. TL; DR 정의 : 헤더 파일에는 직접 사용되는 각 유형을 직접 정의하거나 해당 헤더 파일에 사용 된 각 함수를 직접 선언하는 헤더 파일이 포함되어야하지만 다른 것은 포함해서는 안됩니다. 포인터 또는 C ++ 참조 유형은 직접 사용 자격이 없습니다. 순방향 참조가 선호됩니다.
무료 #include
지침을 위한 장소가 있으며 , 이것은 자동화 된 테스트입니다. 소프트웨어 패키지의 모든 헤더 파일에 대해 다음을 자동으로 생성 한 후 컴파일합니다.
#include "path/to/random/header_under_test"
int main () { return 0; }
컴파일은 깨끗해야합니다 (즉, 경고 나 오류가 없어야합니다). 불완전한 유형 또는 알 수없는 유형에 관한 경고 또는 오류는 테스트중인 헤더 파일에 누락 된 #include
지시문 및 / 또는 전달 선언이 없음을 의미합니다. 참고 : 테스트 통과라고해서 #include
지시어가 충분 하지 않다는 의미는 아닙니다 .
이미 말한 것 외에도.
H 파일에는 항상 다음이 포함되어야합니다.
H 파일은 다음을 포함해서는 안됩니다.
static
.(또한 일정하지 않은 전역 / 외부 변수를 어디에서나 사용해야 할 이유는 없지만 다른 게시물에 대한 토론입니다.)
나는 결코 결코 말하지 않을 것이지만, 파싱 될 때 데이터와 코드를 생성하는 문장은 .h 파일에 있으면 안됩니다.
매크로, 인라인 함수 및 템플릿은 데이터 또는 코드처럼 보일 수 있지만 구문 분석 할 때 코드를 생성하지 않고 대신 사용할 때 코드를 생성합니다. 이러한 항목은 종종 하나 이상의 .c 또는 .cpp에서 사용해야하므로 .h에 속합니다.
필자의 의견에 따르면 헤더 파일에는 해당 .c 또는 .cpp에 대한 최소한의 실용적인 인터페이스가 있어야합니다. 인터페이스에는 #defines, class, typedef, 구조체 정의, 함수 프로토 타입 및 전역 변수에 대한 덜 선호되는 extern 정의가 포함될 수 있습니다. 그러나 선언이 하나의 소스 파일에서만 사용되는 경우 .h에서 제외되고 대신 소스 파일에 포함되어야합니다.
일부는 동의하지 않을 수 있지만 .h 파일에 대한 개인적 기준은 컴파일 할 수있는 다른 모든 .h 파일을 #include한다는 것입니다. 경우에 따라 이것은 많은 파일이 될 수 있으므로 포함 파일의 큰 트리를 포함하지 않고 클래스의 객체에 대한 포인터를 사용할 수 있도록 클래스에 대한 순방향 선언과 같은 외부 종속성을 줄이는 효과적인 방법이 있습니다.
헤더 파일의 구성은 다음과 같습니다.
헤더 파일에는 객체 정의가 포함되어서는 안되며 형식 정의와 객체 선언 만 포함되어야합니다.
구문 분석 할 때 데이터 및 코드를 생성하는 명령문은 .h
파일 에 없어야 합니다. 필자의 견해로는 헤더 파일에는 해당하는 .c
또는 에 대한 실제적인 인터페이스 만 있어야합니다 .cpp
.