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 파일에서 정방향 선언 을 사용하는 것을 고려 하십시오.
답변
만약 내가 #include <callback.h>
, 나는 #include
내 코드를 컴파일하기 위해 많은 다른 헤더 파일 이 필요하지 않습니다 . 에서 callback.h
당신이에 대해 컴파일하는 데 필요한 모든 것을 포함해야한다. 하지만 더 이상은 없습니다.
헤더 파일 (예 :)에서 정방향 선언을 사용 class GtkButton;
하는 것이 #include
충분한 지 고려하여 헤더 의 지시문 수 (그리고 컴파일 시간 및 복잡성) 를 줄일 수 있습니다 .