C02 編譯基礎上的模組化

2021-09-23 01:53:24 字數 1434 閱讀 6620

getchar 可以防止閃退 但是有時候會失效

原因是因為輸入時候「緩衝區」沒有清除的原因 可以在

前面加上

fflush

(stdin

);

上編譯鏈結過程中 手動生成了exe檔案程式

那麼其中的

# include

"stdio.h"

其實他的作用就是

判斷使用者輸入的數字是偶數還是奇數

#include

intui_showmsggetnumber()

void

ui_showresult

(int niseven)

else

}int

math_isevennumber

(int nnumber)

else

}int

main()

/c main.c

cl /c ui_show.c

cl /c math.c

分別得到三個obj,接著使用聯結器將3個obj拼接為exe檔案

link main.obj math.obj ui_show.boj

可以得到exe,功能與之前一樣

但是進行了檔案的劃分

以上的**中,還有一點弊端,就是我們在使用自定義函式時,並沒有寫函式宣告,

而直接使用,這其實是非常危險的,甚至在一些老編譯器上,是編譯不通過的。正確

做法應該是:將函式宣告寫在函式呼叫之前,使得編譯器,可以根據你的函式宣告,

來檢查你呼叫函式的方式是否正確:修改後的main.c

int

ui_showmsggetnumber()

;void

ui_showresult

(int niseven)

;int

math_isevennumber

(int nnumber)

;int

main()

不過,在實際工作中,我們還剩下最後乙個問題沒有解決:那就是,按照常理,函式

的介面(也就是函式宣告),其提供方應該是功能實現者本人,比如以下的例子,那

幾個函式(ui_showmsggetnumber等),它們的宣告,應該是ui.c的作者提供,而

不應該是main.c的作者自己寫。

我們如何解決這個矛盾呢?答案是:標頭檔案。

事實上,一般而言,.c檔案的作者應該配套地提供函式介面的標頭檔案,這樣,其它.c文

件的作者,可以直接通過包含標頭檔案,來獲取對應的函式介面。

所以,我們的專案介面最終,變成了以下的情況:

其實每個模組的作者,只需要提供自身的obj檔案及對應

的標頭檔案即可。

a b 在編譯基礎上的討論

關於討論 中的 c a b 這個表示式的面試題一直都在出現。從很直觀的角度上來說你可以理解成為以下的兩種形式 乙個是 c a b 另一種是c a b 其實做過編譯程式的人可以考慮以下過程,在詞法分析階段要進行的是將輸入的檔案切成token,並形成token序列,你可以知道 對 進行處理的時候將執行以...

C語言筆記 模組化編譯鏈結 MinGW

在我們入門c c 語言時,編寫的大部分c語言程式都只包含乙個原始檔,沒有將 分散到多個模組中,這裡的模組指的時不同的原始檔,每個檔案稱為乙個可編譯單元,可以分別編譯。在c語言中,我們可以將乙個.c檔案稱為乙個模組 module 所謂模組化開發,是指乙個程式包含了多個原始檔 c 檔案 以及標頭檔案 h...

C 工程的模組化實現

目錄 1.新建.cs檔案,確保使用相同的namespace名稱。2.在.cs檔案中,新建乙個類,將相關子函式下掛到該類。3.在form1.cs檔案,使用該類定義乙個物件,便可以借助該物件呼叫相關子函式。1.新建.cs檔案,確保使用相同的namespace名稱。2.在.cs檔案中,新建乙個類,將相關子...