C 記憶體模型之單獨編譯

2021-10-18 18:58:34 字數 995 閱讀 8550

將乙個程式分成多個檔案按儲存,如果過對程式修改,找到要修改得檔案進行修改後重新編譯,則可以之重新編譯該檔案,然後後將他於其他檔案得編譯版本鏈結,是的大程式得管理更加高效便捷。

一般單檔案大程式可以分成三部分。

標頭檔案:包含結構宣告和使用這些結構得函式原型。

源**檔案:包含於結構有關得函式得**。

注意:不要將函式定義放入標頭檔案,否則多個檔案呼叫的時會再乙個程式**現兩個以上得相同函式,導致出錯。

其次,自己寫的標頭檔案不要用尖括號<>包括,如果檔名包含在尖括號中,則c++編譯器將在儲存標準標頭檔案的主機系統的檔案系統中查詢;但如果檔名包含在雙引號中,則編譯器將首先查詢當前的工作目錄或源**目錄(或其他目錄,這取決於編譯器)。如果沒有在那裡找到標頭檔案,則將在標準位置查詢。因此在包含自己的標頭檔案時,應使用引號而不是尖括號。

有一種標準的c/c++技術可以避免多次包含同乙個標頭檔案。它是基於預處理器編譯指令#ifndef(即if not defined)的。下面的**片段意味著僅當以前沒有使用預處理器編譯指令#define定義名稱coordinh時,才處理#ifndef和#endif之間的語句:

#ifndef coordin_h_

#define coordin_h_..

....

...#endif

編譯器首次遇到該檔案時,名稱coordinh沒有定義(我們根據include檔名來選擇名稱,並加上一些下劃線,以建立乙個在其他地方不太可能被定義的名稱)。在這種情況下,編譯器將檢視#ifndef和#endif之間的內容(這正是我們希望的),並讀取定義coordinh的一行。如果在同乙個檔案中遇到其他包含coordin.h的**,編譯器將知道coordinh已經被定義了,從而跳到#endfi後面的一行上。注意,這種方法並不能防止編譯器將檔案包含兩次,而只是讓它忽略除第一次包含之外的所有內容。大多數標準c和c++標頭檔案都使用這種防護(guarding)方案。否則,可能在乙個檔案中定義同乙個結構兩次,這將導致編譯錯誤。

C 單獨編譯(原型與實現分離)

將原來的程式分為三個部分 標頭檔案常包含的內容 防止重複包含 ifndef name h define name h place include file contents here endif編譯器首次遇到該檔案時,名稱name h 沒有被定義。在這種情況下,編譯器將檢視 ifndef和 endi...

c 記憶體模型

1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static全域性變數和靜態變數的存放區域。初始化的全域性變數和...

C 記憶體模型

1.在c 中,不要在標頭檔案中進行變數宣告。因為單定義規則的存在,不同原始檔中對於同乙個全域性變數只能夠定義一次。因此如果在標頭檔案中包含變數定義,那麼很有可能使用相同標頭檔案的原始檔會對這個變數產生多次定義。2.new 與 delete等通過動態分配記憶體產生的資料將儲存在堆 heap 中。3.在...