c语言extern关键字的作用,C语言中的extern关键字的使用

C语言中的extern关键字的使用

发布时间:2018-07-25 10:11,

浏览次数:492

, 标签:

extern

引用同一个文件中的变量

看一段测试代码:

#define _CRT_SECURE_NO_WARNING 1 #include int func(); int main() {

func(); printf("%d\n", num); return 0; } int num = 4; int func() {

printf("%d\n",num); return num; }

这个时候一编译会发现编译器报错

* 如果按照这个顺序,变量

num在main函数的后边进行声明和初始化的话,那么在main函数中是不能直接引用num这个变量的,因为当编译器编译到这一句话的时候,找不到num这个变量的声明,但是在func函数中是可以正常使用,因为func对num的调用是发生在num的声明和初始化之后。

* 如果我不想改变num的声明的位置,但是想在main函数中直接使用num这个变量,怎么办呢?

* 可以使用extern这个关键字。

*

像下面这一段代码,利用extern关键字先声明一下num变量,告诉编译器num这个变量是存在的,但是不是在这之前声明的,你到别的地方找找吧,果然,这样就可以顺利通过编译啦。但是你要是想欺骗编译器也是不行的,比如你声明了extern

int num;但是在后面却没有真正的给出num变量的声明,那么编译器去别的地方找了,但是没找到还是不行的。

修正后的代码

#define _CRT_SECURE_NO_WARNING 1 #include int func(); int main() {

extern int num; func(); printf("%d\n", num); return 0; } int num = 4; int

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

引用另一个文件中的变量

如果extern这个关键字就这点功能,那么这个关键字就显得多余了,因为上边的程序可以通过将num变量在main函数的上边声明,使得在main函数中也可以使用。

extern这个关键字的真正的作用是引用不在同一个文件中的变量或者函数。

main.c

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

fun.c

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

* 这里b.c中定义了一个变量num,如果main.c中想要引用这个变量,那么可以使用extern这个关键字,

* 注意这里能成功引用的原因是,num这个关键字在b.c中是一个全局变量

,也就是说只有当一个变量是一个全局变量时,extern变量才会起作用,向下面这样是不行的。

main.c

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

fun.c

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

* extern关键字只需要指明类型和变量名就行了,不能再重新赋值,

* 初始化需要在原文件所在处进行,如果不进行初始化的话,全局变量会被编译器自动初始化为0。像这种写法是不行的。 extern int num=4;

* 但是在声明之后就可以使用变量名进行修改了,像这样 #include int main() { extern int num;

num=1; printf("%d",num); return 0; }

* 当然了,如果不想修改还可以使用const修饰

*

使用include将另一个文件全部包含进去可以引用另一个文件中的变量,但是这样做的结果就是,被包含的文件中的所有的变量和方法都可以被这个文件使用,这样就变得不安全,

* 如果只是希望一个文件使用另一个文件中的某个变量还是使用extern关键字更好。

引用另一个文件中的函数

extern除了引用另一个文件中的变量外,还可以引用另一个文件中的函数,引用方法和引用变量相似。

main.c

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

fun.c

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值