一,static和extern:
大工程下我們會(huì)碰到很多源文件。
文件a.c static int i; //只在a文件中用 int j; //在工程里用 static void init() //只在a文件中用 { } void callme() //在工程中用 { static int sum; }
|
上面的全局i變量和init()函數(shù)只能用在a.c文件中,全局變量sum的作用域只在callme里。變量j和函數(shù)callme()的全局限擴(kuò)充到整個(gè)工程文件。所以可以在下面的b.c中用extern關(guān)鍵字調(diào)用。extern告訴編譯器這個(gè)變量或者函數(shù)在其他文件里已經(jīng)被定義了。
文件b.c extern int j; //調(diào)用a文件里的 extern void callme(); //調(diào)用a文件里的 int main() { ... }
|
extern的另外用法是當(dāng)C和C++混合編程時(shí)如果c++調(diào)用的是c源文件定義的函數(shù)或者變量,那么要加extern來告訴編譯器用c方式命名函數(shù):
文件A.cpp調(diào)用a.c里面的變量i和函數(shù)callme() extern "C" //在c++文件里調(diào)用c文件中的變量 { int j; void callme(); } int main() { callme(); }
|
二,static法則:
A、若全局變量?jī)H在單個(gè)C文件中訪問,則可以將這個(gè)變量修改為靜態(tài)全局變量,以降低模塊間的耦合度;
B、若全局變量?jī)H由單個(gè)函數(shù)訪問,則可以將這個(gè)變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度;
C、設(shè)計(jì)和使用訪問動(dòng)態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函數(shù)時(shí),需要考慮重入問題;
posted on 2008-06-19 20:30
Macaulish 閱讀(628)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
c/c++