C程式的結構化組織方式介紹

來源:互聯網
上載者:User

在C語言的應用領域,如通訊領域和嵌入式系統領域,一個的軟體項目通常包含很多複雜的功能,實現這個項目不是一個程式員單槍匹馬可以勝任的,往往需要一個 團隊的有效合作,另外,在一個以C代碼為主的完整的項目中,經常也需要加入一些其他語言的代碼,例如,C代碼和彙編代碼的混合使用,C檔案和C++的同時 使用。這些都增加了一個軟體項目的複雜程度,為了提高軟體品質,合理組織的各種代碼和檔案是非常重要的。

組織代碼和檔案的目的是為了使團隊合作更加有效,使軟體項目有良好的可擴充性、可維護性、可移植性、可裁減、可測試性,防止錯誤發生,提高軟體的穩定性。 通常情況下,軟體項目採用層次化結構和模組化開發的方法,例如,一個嵌入式軟體項目可能有驅動層,作業系統層,功能層,應用程式層,每一個層使用它的下層 提供的介面,並為它的上層提供調用介面,模組則是每一個層中完成一個功能的單元,例如驅動層的每一個裝置的驅動就是一個模組,應用程式層的每個應用程式就是一 個模組,模組使用下層提供的介面和同層其他模組提供的介面,完成特定功能,為上層和同層的其他模組提供調用介面。

這裡的介面是指一個功能模組暴露出來的,提供給其他模組的訪問具體功能的方法。根據C語言的特點,使用*.c檔案實現模組的功能,使用*.h檔案暴露單元 的介面,在*.h檔案裡聲明外部其他模組可能是用的函數,資料類型,全域變數,類型定義,宏定義和常量定義.外部模組只需包含*.h檔案就可以使用相應的 功能.當然,模組可以在細化為子模組.雖然我們這裡說的介面和COM(萬用群組件模型)裡定義的介面不同,但是,根據COM裡對介面的討論,為了使軟體在修 改時,一個模組的修改不會影響到其他模組的一個模組的修改不會導致其他模組也需要修改,所以,介面第一次發布後,修改*.h檔案不能導致使用這個介面的其 他模組需要重新編寫.

根據C語言的特點,並借鑒一些成熟軟體項目代碼,總結C項目中代碼檔案組織的基本建議:

使用層次化和模組化的軟體開發模型.每一個模組只能使用所在層和下一層模組提供的介面.

每個模組的檔案包存在獨立的一個檔案夾中.通常情況下,實現一個模組的檔案不止一個,這些相關的檔案應該儲存在一個檔案夾中.

用於模組裁減的條件編譯宏儲存在一個獨立的檔案裡,便於軟體裁減.

硬體相關代碼和作業系統相關代碼與純C代碼相對獨立儲存,以便於軟體移植.

聲明和定義分開,使用*.h檔案暴露模組需要提供給外部的函數,宏,類型,常量,全域變數,盡量做到模組對外部透明,使用者在使用模組功能時不需要瞭解具體的實現,檔案一旦發布,要修改一定要很謹慎,檔案夾和檔案命名要能夠反映出模組的功能.

正式版本和測試版本使用統一檔案,使用宏控制是否產生測試輸出。

必要的注釋不可缺少。

理想的情況下,一個可執行檔模組提供一個公開的介面,即使用一個*.h檔案暴露介面,但是,有時候,一個模組需要提供不止一個介面,這時,就要為每個定義 的介面提供一個公開的介面。在C語言的裡,每個C檔案是一個模組,標頭檔為使用這個模組的使用者提供介面,使用者只要包含相應的標頭檔就可以使用在這個標頭檔 中暴露的介面。所有的標頭檔都建議參考以下的規則:

1.標頭檔中不能有可執行代碼,也不能有資料的定義,只能有宏、類型(typedef,struct,union,menu),資料和函數的聲明。例如以下的代碼可以包含在標頭檔裡:

#define  NAMESTRING  “name”
typedef  unsign  long  word;
menu{
flag1;
flag2;
};
typedef  struct{
int  x;
int  y;
}
Piont;
extent  Fun(void);
extent  int  a;

全域變數和函數的定義不能出現在*.h檔案裡。例如下面的代碼不能包含在標頭檔:

int  a;
void  Fun1(void)
{
a++;
}

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。