大工程下我們會碰到很多源文檔。
文檔a.c
static int i; //只在a文檔中用
int j; //在工程裡用
static void init() //只在a文檔中用
{
}
void callme() //在工程中用
{
static int sum;
}
上面的全局i變量和init()函數只能用在a.c文檔中,全局變量sum的作用域只在callme裡。變量j和函數callme()的全局限擴充到整個工程文檔。所以能夠在下面的b.c中用extern關鍵字調用。extern告訴編譯器這個變量或函數在其他文檔裡已被定義了。
文檔b.c
extern int j; //調用a文檔裡的
extern void callme(); //調用a文檔裡的
int main()
{
…
}
extern的另外用法是當C和C++混合編程時假如c++調用的是c源文檔定義的函數或變量,那麼要加extern來告訴編譯器用c方式命名函數:
文檔A.cpp調用a.c裡面的變量i和函數callme()
extern “C” //在c++文檔裡調用c文檔中的變量
{
int j;
void callme();
}
int main()
{
callme();
}
二,static法則:
A、若全局變量僅在單個C文檔中訪問,則能夠將這個變量修改為靜態全局變量,tbw以降低模塊間的耦合度;
B、若全局變量僅由單個函數訪問,則能夠將這個變量改為該函數的靜態局部變量,以降低模塊間的耦合度;
C、設計和使用訪問動態全局變量、靜態全局變量、靜態局部變量的函數時,需要考慮重入問題;