日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言extern关键字(去使用外部全局变量、函数)

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言extern关键字(去使用外部全局变量、函数) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考:C語(yǔ)言正確使用extern關(guān)鍵字
作者:xingjiarong
發(fā)布時(shí)間:2015-08-14 08:37:33
網(wǎng)址:https://blog.csdn.net/xingjiarong/article/details/47656339

目錄

  • 1、引用同一個(gè)文件中的變量
  • 2、引用另一個(gè)文件中的變量
  • 3、引用另一個(gè)文件中的函數(shù)

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

1、引用同一個(gè)文件中的變量

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

如果按照這個(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è)變量是存在的,但是不是在這之前聲明的,你到別的地方找找吧,果然,這樣就可以順利通過(guò)編譯啦。但是你要是想欺騙編譯器也是不行的,比如你聲明了extern int num;但是在后面卻沒(méi)有真正的給出num變量的聲明,那么編譯器去別的地方找了,但是沒(méi)找到還是不行的。

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

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

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

如果extern這個(gè)關(guān)鍵字就這點(diǎn)功能,那么這個(gè)關(guān)鍵字就顯得多余了,因?yàn)樯线叺某绦蚩梢酝ㄟ^(guò)將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; }

b.c

#include<stdio.h>int num = 10;void func() {printf("fun in a.c"); }

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

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

extern int num=4;

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

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

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

mian.c

#include<stdio.h>int main() {extern const int num;printf("%d",num);return 0; }

b.c

#include<stdio.h>const int num=10; void func() {printf("fun in a.c"); }

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

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

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

mian.c

#include<stdio.h>int main() {extern void func();func();return 0; }

b.c

#include<stdio.h>const int num=10; void func() {printf("fun in a.c"); }

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

總結(jié)

以上是生活随笔為你收集整理的C语言extern关键字(去使用外部全局变量、函数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。