[英]#include in .h or .c / .cpp?
在使用 C 或 C++ 編碼時,我應該在哪里使用#include
?
回調.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
回調.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));
...
是否應該所有包含都在 .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); 那是一堆胃灼熱等待發生的事。 我是認真的。 我曾經多次參與過這部電影,並且總是以東京的火焰結束。
是的,這可能導致文件被多次包含,但如果它們具有適當的包含防護設置以防止多個聲明/定義錯誤,那么額外的幾秒構建時間就不值得擔心。 試圖手動管理依賴項是一個痛苦的屁股。
當然,您不應該包含不需要的文件。
盡可能多地包含在您的cpp中,並且只包含hpp中hpp文件所需的包含。 我相信這將有助於加快編譯速度,因為hpp文件的交叉引用會更少。
還要考慮在hpp文件中使用前向聲明來進一步減少include依賴關系鏈。
如果我#include <callback.h>
,我不想#include
許多其他頭文件來編譯我的代碼。 在callback.h
您應該包含編譯它所需的所有內容。 但僅此而已。
考慮在頭文件中使用前向聲明(例如class GtkButton;
)是否足夠,允許您減少頭中的#include
指令的數量(反過來,我的編譯時間和復雜性)。
如果您在 .hpp 文件中使用頭文件,然后在 .cpp 實現文件中使用相同的頭文件,則應將其包含在這兩個文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.