C語言關鍵字"extern"用法

利用關鍵字extern,可以再一個文件中引用另一個文件中定義的變量或者函數(shù)。

Extern用法

一、引用同一個文件中的變量

#include <stdio.h>
int func();
int main()
{
    func(); //1
    printf("%d",num); //2
    return 0;
}

int num = 3;

int func()
{
    printf("%d\n",num);
}

如果按照這個順序,變量 num在main函數(shù)的后邊進行聲明和初始化的話,那么在main函數(shù)中是不能直接引用num這個變量的,因為當編譯器編譯到這一句話的時候,找不到num這個變量的聲明,但是在func函數(shù)中是可以正常使用,因為func對num的調用是發(fā)生在num的聲明和初始化之后。

如果我不想改變num的聲明的位置,但是想在main函數(shù)中直接使用num這個變量,怎么辦呢?可以使用extern這個關鍵字。像下面這一段代碼,利用extern關鍵字先聲明一下num變量,告訴編譯器num這個變量是存在的,但是不是在這之前聲明的,你到別的地方找找吧,果然,這樣就可以順利通過編譯啦。但是你要是想欺騙編譯器也是不行的,比如你聲明了extern int num;但是在后面卻沒有真正的給出num變量的聲明,那么編譯器去別的地方找了,但是沒找到還是不行的。

下面的程序就是利用extern關鍵字,使用在后邊定義的變量。

#include<stdio.h>

int func();

int main()
{
    func(); //1
    extern int num;
    printf("%d",num); //2
    return 0;
}

int num = 3;

int func()
{
    printf("%d\n",num);
}

二、引用另一個文件中的變量

如果extern這個關鍵字就這點功能,那么這個關鍵字就顯得多余了,因為上邊的程序可以通過將num變量在main函數(shù)的上邊聲明,使得在main函數(shù)中也可以使用。
extern這個關鍵字的真正的作用是引用不在同一個文件中的變量或者函數(shù)。
main.c

#include<stdio.h>

int main()
{
    extern int num;
    printf("%d",num);
    return 0;
}

b.c

#include<stdio.h>

int num = 5;

void func()
{
    printf("fun in a.c");
}

例如,這里b.c中定義了一個變量num,如果main.c中想要引用這個變量,那么可以使用extern這個關鍵字,注意這里能成功引用的原因是,num這個關鍵字在b.c中是一個全局變量,也就是說只有當一個變量是一個全局變量時,extern變量才會起作用,向下面這樣是不行的。
main.c

#include<stdio.h>

int main()
{
    extern int num;
    printf("%d",num);
    return 0;
}

b.c

#include<stdio.h>

void func()
{
    int num = 5;
    printf("fun in a.c");
}

另外,extern關鍵字只需要指明類型變量名就行了,不能再重新賦值,初始化需要在原文件所在處進行,如果不進行初始化的話,全局變量會被編譯器自動初始化為0。像這種寫法是不行的。
extern int num=4;
但是在聲明之后就可以使用變量名進行修改了,像這樣:

#include<stdio.h>

int main()
{
    extern int num;
    num=1;
    printf("%d",num);
    return 0;
}

如果不想這個變量被修改可以使用const關鍵字進行修飾,寫法如下:
mian.c

#include<stdio.h>

int main()
{
    extern const int num;
    printf("%d",num);
    return 0;
}

b.c

#include<stdio.h>

const int num=5;
void func()
{
    printf("fun in a.c");
}

使用include將另一個文件全部包含進去可以引用另一個文件中的變量,但是這樣做的結果就是,被包含的文件中的所有的變量和方法都可以被這個文件使用,這樣就變得不安全,如果只是希望一個文件使用另一個文件中的某個變量還是使用extern關鍵字更好

三、引用另一個文件中的函數(shù)

extern除了引用另一個文件中的變量外,還可以引用另一個文件中的函數(shù),引用方法和引用變量相似。
mian.c

#include<stdio.h>

int main()
{
    extern void func();
    func();
    return 0;
}

b.c

#include<stdio.h>

const int num=5;
void func()
{
    printf("fun in a.c");
}

這里main函數(shù)中引用了b.c中的函數(shù)func。因為所有的函數(shù)都是全局的,所以對函數(shù)的extern用法和對全局變量的修飾基本相同,需要注意的就是,需要指明返回值的類型和參數(shù)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 注:這是第三遍讀《C語言深度解剖》,想想好像自從大學開始就沒讀完過幾本書,其中譚浩強的那本《C語言程序設計(第四版...
    HavenXie閱讀 1,923評論 1 6
  • 1 原理 1.1 首先,關于聲明和定義的區(qū)別。 這種寫法(函數(shù)原型后加;號表示結束的寫法)只能叫函數(shù)聲明而不能叫函...
    Pitfalls閱讀 6,838評論 2 12
  • 每日一我 帶了雞蛋玉米棒東北米餅去公司,昨晚熬夜起晚了。 每日一善 10點開會,用了兩個小時,終于把一個問題闡釋清...
    sophietyl閱讀 306評論 0 0
  • 今天下班回來沒讓我弟接 自己一個人從北邊走回來 路兩邊都被種上了棉花 有的還在開花 有的卻已經結棉花了 差別真是大...
    阿瓊阿瓊閱讀 249評論 0 0
  • 話題丨十二星座最適合什么工作(下)原創(chuàng) 2016-11-09 高冊 職優(yōu)你上海 文/高冊 圖/高冊 投了無數(shù)份簡歷...
    高冊閱讀 481評論 1 0

友情鏈接更多精彩內容