c語言extern的用法

眉頭一皺計上心來發表於2012-06-02
大工程下我們會碰到很多原始檔。

檔案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();
}


相關文章