C語言模塊化編程(封裝)
- 模塊即是一個.c 文件和一個.h 文件的結合,頭文件(.h)中是對於該模塊接口的聲明。模塊化的實現方法和實質:將一個功能模塊的代碼單獨編寫成一個.c文件,然后把該模塊的接口函數放在.h文件中。
- 對外發布的模塊調用本質上是一個編譯好的.so或.a或.o的二進行制文件加一個.h文件的組。
- 不要在.h文件中定義變量,如果不同的模塊包含該.h文件,則在不同的模塊中該變量對應不同的地址。
- 模塊內的函數和模塊內的全局變量需在.c 文件開頭冠以static 關鍵字聲明,一方面是限定了函數的作用范圍只是在本模塊中起作用,另一方面也給人傳達這樣的信息:該函數不會被其他模塊調用。
- 函數體內,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變,賦值操作除外。
- 一個模塊提供給其它模塊調用的外部函數及數據需在.h 中文件中冠以extern 關鍵字聲明。
- extern會破壞模塊的封裝性,不建議使用, 因此extern一般用於全局變量的聲明。
extern的預處理示例:
/* in var_a.h */ #ifdef VAR_GLOBAL #define VAR_EXT
#else
#define VAR_EXT extern
#endif VAR_EXT int var1; VAR_EXT int var2;
如果var_b.h包含了var_a.h且在var_b.h中有以下宏定義
#define VAR_GLOBAL
由於VAR_GLOBAL被定義為空,於是變量展開為
int var1; int var2;
如果在var_b.h包含了var_a.h但在var_b.h中沒有以上宏定義則變量展開為
extern int var1; extern int var2;