2014-11-04 20 views
1

做,包括頭文件,如stdio.h中,CONIO.H或任何其他使我們的代碼或程序重待辦事項包括頭文件使程序更重的在C

+1

爲什麼添加了c#標籤? – 2014-11-04 09:31:17

+0

我刪除了'c#'。 – wimh 2014-11-04 09:32:10

+3

你如何權衡一個計算機程序? – 2014-11-04 09:35:26

回答

3

包括頭文件插入所有內容從他們進入翻譯單位進行預處理。

如果include僅包含聲明(通常是這種情況)並且函數在庫文件中實現,則代碼不會變得更重。如果頭文件包含實現,它將在編譯時編譯,從而使文件更重。

您可以在此處詳細瞭解編譯步驟: http://www.tenouk.com/ModuleW.html

+0

一個頭文件通常只包含數據*聲明*,所以包含一個頭文件不會添加「所有數據」;鏈接器會在數據被明確引用時執行該操作。 – Clifford 2014-11-04 09:43:18

+0

你可以推論出它的意思是什麼時候說頭是否包含實現。 – 2014-11-04 09:47:35

+0

不是,因爲那部分是指函數的實現,而不是數據的實例化。 – Clifford 2014-11-04 09:49:18

3

你爲什麼不嘗試,包括他們建立一個EXE,然後不包括他們,並建立一個EXE,看看會發生什麼文件的大小。我懷疑你會發現,鏈接器足夠聰明,只需要在EXE中創建必要的東西。

0

通常頭文件只包含聲明語句。聲明本身不會增加代碼大小。在代碼的任何位置引用已聲明的符號將導致鏈接器包含定義爲聲明符號的代碼

由於頭文件必須由在它被包含的代碼的情況下,編譯器進行解析,生成時間可以通過頭文件包含被延長。非常大或深度嵌套的頭文件(例如windows.h)可以通過這種方式產生相當大的效果。

此外,如果您使用的IDE具有代碼導航和理解功能,例如自動完成和語法檢查,則IDE必須以與編譯器類似的方式解析代碼,並且此處頭文件可以再次降低該過程。

雖然你應該避免包括不必要的頭文件,那些含有聲明融合,在格蘭代碼是不可避免的 - 或者至少避免他們將會導致有可能導致錯誤,重複和使代碼很難維護。

1

對於典型的發佈版本,沒有。頭文件通常只包含聲明,未使用的聲明不會影響發佈版本的大小。頭文件可以包含內聯函數定義,如果定義沒有被優化,可能會被編譯器發出。但是,這可能不適用於系統標題,如<stdio.h>

對於典型的調試版本,。調試數據通常包含有關聲明的信息,即使這些聲明未在程序中使用。這樣你可以在調試器中使用這些聲明。現代調試器包括函數定義,枚舉,甚至包括最近的預處理器定義。

這就是說,你可以把任何東西頭文件。

不必要的頭文件包含的主要作用是使生成過程花費更長的時間。