2016-08-05 67 views
-2

最近我一直在使用TIVA C系列launchpad板,該板上有一個Cortex-M4芯片。我使用Code Composer Studio作爲我的IDE。關於包含.c和.h文件的困惑

現在有很多困惑,因爲通過反覆試驗我發現,爲了使用芯片製造商提供的某些功能,我需要包含.c文件而不是包含.h文件。

這引起了我的警惕,我承認在編譯器設計方面我不是專家程序員或專家。但有誰知道爲什麼編譯器需要.c文件而不需要.h文件?

.h文件仍在使用中,因爲它具有.c文件所需的定義。

也許一個更好的問題可能是這樣的:

當有.h文件和.c文件,你包括.c文件在你的代碼或者你有.h文件?

我的反覆練習告訴我必須包含.c文件,但我完全盲目地看到了實際的規則。

對不起,如果有任何部分太模糊。如果我共享我的main.c文件,我會完全沒問題,所以你可以看到我是如何包含這些文件的,但是我覺得我的問題更多的是關於包含文件的一般規則是什麼時,如果同時存在.h和.c文件。

謝謝你隨時可以幫我理解這個問題。

編輯:爲什麼倒票?我以爲來這裏尋求幫助是這個地方的意義呢?

+0

您確定您必須包含.c文件嗎?請小心[XY問題](http://xyproblem.info/)。 – MikeCAT

+1

我認爲問題可能是你沒有構建或鏈接c文件。 –

+0

downvote按鈕的提示是「這個問題沒有顯示任何研究工作;它不清楚或沒有用」。我沒有倒下,但我相信在這裏的一些人會考慮你的問題,表現出缺乏研究的努力。 –

回答

2

重要的是要明白,基本上所有的C程序都是從多個源文件構建的。在某些情況下,這些源中的很多會被預編譯到一個或多個庫中,但構建C程序的相當普遍的做法還包括構建多個C源文件並將它們鏈接到相應的庫並生成最終結果。

同樣重要的是要了解的是,雖然Ç允許多個兼容聲明的功能和文件範圍變量,它允許只有一每個不同的功能或變量的定義在整個程序的任何地方。這是將聲明放入頭文件(通常以.h擴展名命名)的慣例的主要原因。對給定程序有貢獻的任何數量的源文件可能都是相同的頭文件,但其中至多有一個可能包含相應定義的源文件,然後僅當該文件未直接包含在構建中時。

可能可以編寫主要源文件,以便它可以直接包含所有需要的定義,在這種情況下,不需要包含標題,但不能包含兩個單獨的源文件如果這產生了重複的函數定義,則對相同的程序有貢獻。最終,這種方法也可能失敗,因爲給定編譯器可以管理的源文件的大小和複雜程度可能有限。

如果芯片製造商的C源文件附帶有頭文件,那麼您自己的源文件應該只包含這些頭文件。你應該能夠很好地從這些源生成目標文件。然而,要構建可執行程序,您還必須構建芯片製造商的C源代碼,並將它們鏈接到您自己的源代碼。創建一個包含芯片製造商來源並將其鏈接起來的庫是明智的,但它也可以直接爲每個程序構建所需的源文件。您的IDE應該支持這兩個選項。