2009-07-29 35 views
21

我想教自己C編程,我在Windows XP下使用DevC++爲我的IDE。我有點困惑於調用我自己的頭文件的正確方法。C頭文件 - 正確的方式包括

我有我的主要源文件調用的main.c和功能的一個單獨的文件名爲myFunctions.c我用「main.c中包括有‘myFunctions.h’用我所有的函數原型居住在這頭文件。

myFunctions.c包含兩個函數,一個叫做showDate(),另一個叫做showScreen(),這兩個函數都可以從main.c中調用。

當我試圖在showScreen()中調用showDate()並且在編譯/鏈接期間,我的問題開始抱怨,因爲我沒有myFunctions.c中的showDate()的原型。

我想知道的是我需要做哪些事情?

  1. 包括內部myFunctions.c

  2. 聲明原型都myFunctions.h和myFunctions.c
  3. 聲明原型只是myFunctions.c只有
「myFunctions.h」

以上所有內容似乎都能糾正編譯器錯誤,並允許我從main.c和myFunctions.c中調用函數bot,但我無法找到正確的過程的確切來源。

回答

24

在許多地方使用#1 - #include。

永遠不要使用#2 - 永遠不要多次聲明任何東西。

很少使用#3 - 在.c文件中聲明某些內容,就好像你永遠不會重用它一樣。

2

您應該選擇選項1.或者定購myfunctions.c,以便調用函數的定義發生在調用函數的函數之前。通過在文件中包含標題,您可以讓編譯器捕獲聲明和定義之間的任何不匹配。

7

頭文件應包含原型。然後將它包含在所有使用原型的位置,包括包含函數定義的.c文件。

順便說一下DecC++不再被積極開發 - 您應該考慮改用Code::Blocks代替。

+0

謝謝Neil,我會稍後再研究Code :: Blocks – 2009-07-29 12:48:24

+1

Code :: Block很棒 - 我注意到的第一件事是Code Folding,這是我在DevC++中真正想要的東西 Cheers Neil! – 2009-07-29 15:35:15

3

絕對是第一個選項。

1

正如其他人已經說過的,您應該使用第一個選項。一般規則是,函數原型駐留在.h文件中,並在.c文件中實現。