假設我們開發一個圖書館管理系統,讀者的信息使用reader.c和reader.h文件來管理,那麼,讀者在登記的時候,需要輸入年齡,那麼,可以設計如下的函數,接收登記讀者的年齡輸入:
int reader_age_add(int age);
此時,通過參數,把age變量表示的讀者年齡存放到系統中。那麼,我們可以在reader.c源文件中定義存放讀者年齡的數組和操作數組的函數。源碼如下:
然後,在reader.h頭文件中,聲明對外使用的接口函數和變量。頭文件的内容如下:
那麼,我們可以在test.c源文件中引用reader.h頭文件,然後,使用頭文件聲明提供的接口函數和變量,完成對讀者年齡的注冊。代碼如下:
程序運行結果如下:
可以看到,在test.c源文件中引用了reader.h頭文件。那麼,就可以使用reader.h頭文件聲明的接口函數和變量。
當其他模塊要引用讀者管理模塊聲明的接口函數、變量和定義的宏時,隻需要包含 reader.h 頭文件就可以了。
所以,我們在設計程序的過程中,盡量把程序進行功能模塊劃分,每個模塊定義對應的.c和.h文件來封裝模塊的代碼。
7 .h頭文件避免重定義C語言提供了.h頭文件,可以在.h頭文件中聲明函數或定義宏等信息。假設test.h頭文件,在該頭文件中定義如下宏:
//定義一個宏
#define NUM 100
那麼,有多個.c頭文件都包含引用test.h頭文件,此時,引起NUM宏的多重定義。為了避免這個文件,test.h頭文件的内容應該如下:
#ifndef _TEST_H_ //if判斷,如果沒有定義 _TEST_H_宏,就執行下面的語句,與if一樣;
#define _TEST_H_ //定義 _TEST_H_ 宏
//定義一個宏
#define NUM 100
#endif
此時,通過#ifndef來判斷 _TEST_H_ 宏是否已經定義,如果還沒有定義,就執行代碼:
#define _TEST_H_
//定義一個宏
#define NUM 100
此時,定義 _TEST_H_ 宏,并定義 NUM 宏。
那麼,當其他.c源文件包含 test.h頭文件的時候,通過 #ifndef 判斷 _TEST_H_ 宏已經定義,就不再執行代碼:
#define _TEST_H_
//定義一個宏
#define NUM 100
此時,就不再進行多次定義 NUM 宏,從而保證 test.h頭文件的代碼隻編譯定義一次。避免了test.h頭文件多重包含,導緻test.h頭文件中的數據重複定義。
8 總結構建一個大型軟件的時候,需要把軟件的各個功能模塊進行劃分。那麼,不同的功能模塊就可以使用不同的文件來存放。便于代碼的管理。
所以,重點了解和掌握.c源文件和.h頭文件的搭配使用。當構建一個大型複雜軟件的時候,就可以劃分不同的功能模塊,不同的功能模塊使用不同的.c源文件和.h頭文件進行封裝。
軟件設計的模塊化程度越高,擴展性就越強。
讀者要仔細分析,掌握好每一個知識點,然後,自己總結出對該知識點的理解。自己總結出來的知識,理解才深刻,才是自己掌握的知識。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!