簡體   English   中英

#include 在 .h 或 .c / .cpp 中?

[英]#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM