extern关键字的用法知识点总结

extern关键字的用法/编译C文件的步骤/数据类型及其长度–知识点总结

一:extern关键字的用法

extern关键字可以用来声明变量、函数作为外部变量或者函数供其它文件使用。
extern表明变量或者函数是定义在其他其他文件中的
例如:extern int a;

显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。
extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern声明不是定义,即不分配存储空间。也就是说,在一个文件中定义了变量和函数, 在其他文件中要使用它们, 可以有两种方式:1:使用头文件,然后声明它们,然后其他文件去包含头文件;2:在其他文件中直接extern。
建议最优用法
例如a.c文件中定义int a = 5和一个函数,在a.h里写extern int a;,如果要在其他文件里调用a这个变量和函数,直接#include<a.h>即可。如下图
在这里插入图片描述1:一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量
只能引用另外一个.c文件里的变量或者函数,不能引用.h文件里的变量,当然,也非常不建议在.h文件里定义变量。因为在.h文件里定义变量,如果这个.h文件被多个.c文件包含则会报重复定义的错误,文章末尾详讲。
例1:在a.h文件中定义一个变量,在b.c文件中引用,因为没有包含头文件,会报错,未定义这个变量
在这里插入图片描述例2:在a.c文件中定义一个变量,在b.c文件中引用,成功调用

在这里插入图片描述2:引用函数

引用变量是一样的,如果需要调用其他.c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带有extern。见下面例子
例1:a.c中定义一个fun函数,b.c中要引用这个函数,b.c中的声明extern int fun(); 与int fun();没有任何区别,如下两个图
在这里插入图片描述
在这里插入图片描述
3:如果不想让其他.c文件引用本文件中的变量,加上static即可
static 表示静态的变量,限制此变量作用域在一个源文件内,其他文件不能用extern来引用此变量,不仅适用于变量,函数也可以。如下图例子,b.c文件就不能引用a.c文件里的静态变量ckx。
在这里插入图片描述include相当于把include .h文件直接带入到本源文件里,比如在b.c文件里include “a.h”,就相当于把a.h文件里所有定义的变量和函数全部拷贝了一份放入了b.c里,一个项目里,一个.h文件可能会被多个.c源文件包含,这样编译的时候就会报重复定义的错误而且尽量不要在.h里定义变量,这是一个不好的习惯。

例子:在a.h里定义一个变量,a.c和b.c都包含这个.h文件,编译的时候就会报错。

在这里插入图片描述
4:另外,extern关键字只需要指明类型和变量名就行了,不能再重新赋值,初始化需要在原文件所在处进行,如果不进行初始化的话,全局变量会被编译器自动初始化为0。像这种写法是不行的。  
extern int num=4;
但是在声明之后就可以使用变量名进行修改了,像这样:

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

5:如果不想这个变量被修改可以使用const关键字进行修饰,写法如下:

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

b.c

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

参考原文链接:https://blog.csdn.net/qq_27664167/article/details/82859852
参考原文链接:https://blog.csdn.net/weixin_34146986/article/details/85918764

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值