一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言正確使用extern關(guān)鍵字

 丁毛毛qxevv5ba 2018-01-05


利用關(guān)鍵字extern,可以在一個(gè)文件中引用另一個(gè)文件中定義的變量或者函數(shù),下面就結(jié)合具體的實(shí)例,分類說明一下。
一、引用同一個(gè)文件中的變量

#include<stdio.h> int func(); int main() { func(); //1 printf('%d',num); //2 return 0; } int num = 3; int func() { printf('%d\n',num); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

如果按照這個(gè)順序,變量 num在main函數(shù)的后邊進(jìn)行聲明和初始化的話,那么在main函數(shù)中是不能直接引用num這個(gè)變量的,因?yàn)楫?dāng)編譯器編譯到這一句話的時(shí)候,找不到num這個(gè)變量的聲明,但是在func函數(shù)中是可以正常使用,因?yàn)閒unc對(duì)num的調(diào)用是發(fā)生在num的聲明和初始化之后。

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

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

#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); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

二、引用另一個(gè)文件中的變量

如果extern這個(gè)關(guān)鍵字就這點(diǎn)功能,那么這個(gè)關(guān)鍵字就顯得多余了,因?yàn)樯线叺某绦蚩梢酝ㄟ^將num變量在main函數(shù)的上邊聲明,使得在main函數(shù)中也可以使用。
extern這個(gè)關(guān)鍵字的真正的作用是引用不在同一個(gè)文件中的變量或者函數(shù)。

main.c

#include<stdio.h> int main() { extern int num; printf('%d',num); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

b.c

#include<stdio.h> int num = 5; void func() { printf('fun in a.c'); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

mian.c

#include<stdio.h> int main() { extern int num; printf('%d',num); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

b.c

#include<stdio.h> void func() { int num = 5; printf('fun in a.c'); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

另外,extern關(guān)鍵字只需要指明類型和變量名就行了,不能再重新賦值,初始化需要在原文件所在處進(jìn)行,如果不進(jìn)行初始化的話,全局變量會(huì)被編譯器自動(dòng)初始化為0。像這種寫法是不行的。

extern int num=4;
  • 1

但是在聲明之后就可以使用變量名進(jìn)行修改了,像這樣:

#include<stdio.h> int main() { extern int num; num=1; printf('%d',num); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果不想這個(gè)變量被修改可以使用const關(guān)鍵字進(jìn)行修飾,寫法如下:
mian.c

#include<stdio.h> int main() { extern const int num; printf('%d',num); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

b.c

#include<stdio.h> const int num=5; void func() { printf('fun in a.c'); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

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

mian.c

#include<stdio.h> int main() { extern void func(); func(); return 0; }
  • 1
  • 2
  • 3
  • 5
  • 6
  • 7
  • 8
  • 9

b.c

#include<stdio.h> const int num=5; void func() { printf('fun in a.c'); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产免费成人激情视频| 国产传媒欧美日韩成人精品| 亚洲一区二区久久观看| 神马午夜福利免费视频| 中文字幕日产乱码一区二区| 国产免费自拍黄片免费看| 亚洲国产香蕉视频在线观看| 欧美人禽色视频免费看| 亚洲最新一区二区三区| 福利新区一区二区人口| 亚洲熟妇av一区二区三区色堂| 亚洲欧美日韩在线看片| 狠狠干狠狠操亚洲综合| 美女被啪的视频在线观看| 欧美国产日本免费不卡| 人妻一区二区三区在线| 少妇特黄av一区二区三区| 大香蕉精品视频一区二区| 欧美尤物在线观看西比尔| 中文字幕高清不卡一区| 久久精品a毛片看国产成人| 欧美午夜国产在线观看| 日韩国产欧美中文字幕| 国产亚洲精品俞拍视频福利区| 日本91在线观看视频| 久久99青青精品免费观看| 日本深夜福利视频在线| 亚洲欧美国产网爆精品| 隔壁的日本人妻中文字幕版| 99久久无色码中文字幕免费| 国产精品福利一级久久| 亚洲欧美日韩中文字幕二欧美| 老司机精品视频免费入口| 国产成人一区二区三区久久| 丰满人妻熟妇乱又伦精另类视频| 日韩亚洲激情在线观看| 精品日韩av一区二区三区| 99国产精品国产精品九九| 久久精品少妇内射毛片| 欧美一区二区三区十区| 日韩精品一区二区毛片|