1. 程式人生 > >【好程式設計師筆記分享】—— C語言中的extern關鍵字

【好程式設計師筆記分享】—— C語言中的extern關鍵字

C語言中的extern關鍵字不僅可以用變數還可以用於函式。當用於函式時,表示宣告函式,引用別人的“外部函式”;當用於變數時,表示宣告一個已經定義過的變數,必須結合定義變數使用。下面我們先來看一個extern用於函式的例子。

先來看一下檔案結構:


test.c中的程式碼如下:

#include <stdio.h>

void test(){
    printf("呼叫了外部的test函式!\n");
}

test.h中的程式碼如下:
#ifndef __extern_______test__
#define __extern_______test__

extern void test();

#endif 

main.c中的程式碼如下:

#include <stdio.h>
#include "test.h"

extern void two();
void two(){
    printf("呼叫了本檔案中的two函式");
}

int main(int argc, const char * argv[]){
    
    test();
    two();
    return 0;
}


由上面的例子中main.c的程式碼中引用了外部的test函式,也引用了本檔案中的two函式。其實extern也可以省略不寫。為了模組化開發,我們把test函式的宣告寫到另一個頭檔案test.h中。以後,我們想呼叫這個test函式,只要包含test.h這個標頭檔案就行了。

接下來,我們來看一個extern用於變數的例子。程式碼如下:

#include <stdio.h>

int a;
extern void show();

int main(int argc, const char * argv[]) {
    
    extern int a;//這裡通過extern將a宣告為區域性變數
    a=50;
    printf("a=%d\n",a);
    show();
    return 0;
}

int a=100;

void show(){
    printf("全域性變數a=%d\n",a);
}
上面程式碼中,通過extern int a;聲明瞭區域性變數a;但下面的a=50;說明a仍然是全域性變數,由a的淡綠色也可以知道是全域性變數。因為在函式中a的顏色是淡綠色則表示是全域性函式,當a的顏色顯示是黑色則表示是區域性變數。
上例中,如果將main函式中的extern去掉,則瞬間全部a顯示為黑色,表示全部是區域性變數,不影響show函式中的全域性變數a的值。

今天就學習這麼多,讓我們好好吸收理解一下吧。