.h 또는 .c / .cpp에 #include?
C 또는 C ++로 코딩 할 때 #include
's 는 어디에 있어야 합니까?
callback.h :
#ifndef _CALLBACK_H_
#define _CALLBACK_H_
#include <sndfile.h>
#include "main.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data);
void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data);
#endif
callback.c :
#include <stdlib.h>
#include <math.h>
#include "config.h"
#include "callback.h"
#include "play.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) {
gint page;
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook));
...
모든 include는 .h 또는 .c / .cpp에 있어야합니까, 아니면 여기에서했던 것처럼 둘 다에 있어야합니까?
에 .c
가능한 한 많이 넣고 .h
. 의 포함 .c
은 해당 파일이 컴파일 될 때만 포함되지만의 포함은 해당 .h
파일을 사용하는 모든 파일에 포함되어야합니다.
다른 .h 파일에 헤더를 포함해야하는 유일한 경우는 해당 헤더의 유형 정의에 액세스해야하는 경우입니다. 예를 들면 :
#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <stdio.h>
void doStuffWith(FILE *f); // need the definition of FILE from stdio.h
#endif
헤더 A가 위의 예와 같이 헤더 B에 의존하는 경우 헤더 A는 헤더 B를 직접 포함해야합니다. 종속성을 충족시키기 위해 .c 파일에 포함을 주문 하지 마십시오 (즉, 헤더 A 앞에 헤더 B 포함). 그것은 일어나기를 기다리는 속쓰림의 큰 더미입니다. 진심이야. 나는 그 영화에 여러 번 출연했고 항상 도쿄에서 불타 오르며 끝났다.
예, 이로 인해 파일이 여러 번 포함될 수 있지만 여러 선언 / 정의 오류로부터 보호하기 위해 적절한 include 가드가 설정되어 있다면 몇 초의 추가 빌드 시간은 걱정할 가치가 없습니다. 종속성을 수동으로 관리하려는 것은 당연한 일입니다.
물론 필요 하지 않은 파일을 포함해서는 안됩니다 .
cpp에 가능한 한 많이 포함하고 hpp의 hpp 파일에 필요한 것만 넣으십시오. 나는 이것이 hpp 파일이 덜 상호 참조되기 때문에 컴파일 속도를 높이는 데 도움이 될 것이라고 믿습니다.
또한 포함 종속성 체인을 줄이기 위해 hpp 파일에서 정방향 선언 을 사용하는 것을 고려 하십시오.
I #include <callback.h>
이면 #include
코드를 컴파일하기 위해 다른 헤더 파일이 많이 필요하지 않습니다 . 에서 callback.h
당신이에 대해 컴파일하는 데 필요한 모든 것을 포함해야한다. 그러나 더 이상은 없습니다.
헤더 파일 (예 :)에서 정방향 선언을 사용 class GtkButton;
하는 것이 #include
충분한 지 고려하여 헤더 의 지시문 수 (그리고 컴파일 시간 및 복잡성) 를 줄일 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/3002110/include-in-h-or-c-cpp
'IT story' 카테고리의 다른 글
mysql의 최대 쿼리 크기는 얼마입니까? (0) | 2020.08.14 |
---|---|
Atom 텍스트 편집기는 저장할 때 후행 공백을 제거합니다. (0) | 2020.08.14 |
SourceTree를 사용하여 분기 된 리포지토리를 어떻게 업데이트합니까? (0) | 2020.08.14 |
JQuery : 'Uncaught TypeError : Illegal invocation'at ajax request-여러 요소 (0) | 2020.08.14 |
IDENTITY_INSERT가 OFF로 설정되어 있습니다. 사용 설정 방법은 무엇입니까? (0) | 2020.08.14 |