Saat membuat kode dalam C atau C ++, di mana saya harus memilikinya #include
?
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));
...
Haruskah semua menyertakan baik dalam .h atau .c / .cpp, atau keduanya seperti yang telah saya lakukan di sini?
Jawaban:
Masukkan sebanyak yang Anda bisa
.c
dan sesedikit mungkin ke dalam.h
. Termasuk dalam.c
hanya disertakan ketika satu file itu dikompilasi, tetapi termasuk untuk.h
harus disertakan oleh setiap file yang menggunakannya.sumber
#ifndef _CALLBACK_H_
, di atasnya, mencegah compiler untuk memprosesnya lebih dari sekali?.h
adalah untuk menghindari kesalahan dalam beberapa kasus karena lingkaran inklusi. Contoh: dua kelas membutuhkan satu sama lain untuk implementasinya, tetapi tidak untuk deklarasinya. Menempatkan keduanya termasuk dalam.cpp
s akan menghindari kesalahan.Satu-satunya saat Anda harus menyertakan header di dalam file .h lainnya adalah jika Anda perlu mengakses definisi tipe di header itu; sebagai contoh:
Jika header A bergantung pada header B seperti contoh di atas, maka header A harus menyertakan header B secara langsung. Apakah TIDAK mencoba untuk memesan Anda termasuk dalam file c untuk memenuhi dependensi (yaitu, termasuk sundulan B sebelum sundulan A); itu adalah tumpukan besar mulas yang menunggu untuk terjadi. Saya sungguh-sungguh. Saya telah berada di film itu beberapa kali, dan itu selalu berakhir dengan Tokyo terbakar.
Ya, hal ini dapat mengakibatkan file disertakan beberapa kali, tetapi jika file tersebut memiliki pelindung include yang tepat yang disiapkan untuk melindungi dari beberapa kesalahan deklarasi / definisi, beberapa detik tambahan waktu pembuatan tidak perlu dikhawatirkan. Mencoba mengelola dependensi secara manual sangat merepotkan.
Tentu saja, Anda tidak boleh memasukkan file yang tidak Anda perlukan .
sumber
Masukkan sebanyak mungkin include di cpp Anda dan hanya yang dibutuhkan oleh file hpp di hpp tersebut. Saya yakin ini akan membantu mempercepat kompilasi, karena file hpp akan lebih sedikit referensi silang.
Pertimbangkan juga untuk menggunakan deklarasi penerusan dalam file hpp Anda untuk lebih mengurangi rantai ketergantungan include.
sumber
Jika saya
#include <callback.h>
, saya tidak ingin memiliki#include
banyak file header lain untuk mendapatkan kode saya untuk dikompilasi. Dalamcallback.h
Anda harus menyertakan semua yang diperlukan untuk mengkompilasi terhadapnya. Tapi tidak lebih.Pertimbangkan apakah menggunakan deklarasi maju di file header Anda (seperti
class GtkButton;
) sudah cukup, memungkinkan Anda mengurangi jumlah#include
arahan di header (dan, pada gilirannya, waktu kompilasi dan kerumitan saya).sumber