簡體   English   中英

包含.c文件和.h文件有什么區別

[英]What is the difference between including a .c file and a .h file

很多時候,當我看到其他人的代碼時,我看到一些包括.h文件,有些包括.c / .cpp文件。 有什么不同?

這取決於文件中的內容。

#include預處理程序指令只是在原始文件中的那一點插入引用的文件。

那么實際的編譯器階段(在預處理器之后運行)看到的是所有插入的結果。

頭文件通常是通過#include設計並打算使用的。 源文件不是,但它有時是有道理的。 例如,當您有一個僅包含定義和初始化程序的C文件時:

const uint8_t image[] = { 128, 128, 0, 0, 0, 0, ... lots more ... };

然后通過使用#include將它提供給某些代碼是有意義的。 它是一個C文件,因為它實際上定義了 (不僅僅是聲明)一個變量。 也許它保存在自己的文件中,因為圖像從用於編輯的其他(圖像)格式轉換為C源。

.h文件稱為頭文件,它們不應包含任何代碼(除非它恰好包含有關C ++模板化對象的信息)。 它們通常包含函數原型,typedef,#define語句,這些語句由包含它們的源文件使用。 .c文件是源文件。 它們通常包含在相應頭文件中原型化的函數的源代碼實現。

來源 - http://cboard.cprogramming.com/c-programming/60805-difference-between-hc-files.html

你可以看一下gcc網站( https://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html ),它報告了你可以在C / C ++中使用的所有擴展的一個很好的總結:

C ++源文件通常使用后綴“.C”,“。cc”,“。cpp”,“。CPP”,“。c ++”,“。cc”或“.cxx”之一; C ++頭文件通常使用'.hh','。hpp','。H'或(對於共享模板代碼)'。tcc'; 和預處理的C ++文件使用后綴'.ii'。 GCC識別具有這些名稱的文件並將它們編譯為C ++程序,即使您以與編譯C程序相同的方式調用編譯器(通常使用名稱gcc)。

包含帶聲明的頭文件是在項目中進行一致聲明的主要,推薦和幾乎在任何地方使用的方法。 包含另一個源文件是另一種(非常罕見)類型的野獸,它在特定條件下是有用的和可能的:

  1. 盡管將代碼編譯為單個模塊,但有理由將代碼拆分為單獨的源文件。 例如,某些功能的不同版本不能從其他模塊中看到。 因此,它們被聲明為static但包含的版本受編譯選項的約束。 另一種變體是大小和/或維護憑證問題。
  2. 包含的文件本身不會編譯為項目模塊。 因此,其導出的定義與包含該文件的模塊不沖突。

在這里,我使用術語定義聲明 ,方式如下:

extern int qq;
void f(int);
#define MYDATATYPE double

以下是定義:

int qq; // here, the variable is allocated and exported
void f(int x) { printf("%d\n", x); } // the same for function

(另外,聲明包括在其類定義中聲明的實體的C ++方法。)

無論如何,案件另一個.c / .cxx /等。 文件包含在源文件中是非常混亂的,應該避免直到非常真實的需要。 有時,特定后綴(例如.tpl)用於此類文件,以避免讀者混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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