您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
C语言extern关键字用法和理解
 
   次浏览      
 2019-8-1
 
编辑推荐:
本文来自于csdn,本文主要介绍了c++利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数,下面就结合具体的实例,分类说明一下。

extern表明变量或者函数是定义在其他其他文件中的

例如:extern int a;

显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。

用法

1.一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量。详见下文1

2.extern int a = 5与int a = 5意义是一样的,都是定义。而extern int a;是声明。但会产生一条警告。详见下文2

3.对于函数而言,和引用变量是一样的,如果需要调用其他.c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带有extern。详见下文3

4.如果不想让其他.c文件引用本文件中的变量,加上static即可。详见下文4

建议最优用法

例如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.extern int a = 5与int a = 5意义是一样的,都是定义。而extern int a;是声明。但会产生一条警告

例1:在a.h文件中使用extern int a = 5定义一个变量,在b.c文件中引用,会报warning,但程序可以运行

3.引用函数

引用变量是一样的,如果需要调用其他.c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带有extern。见下面例子

例1:a.c中定义一个fun函数,b.c中要引用这个函数,b.c中的声明extern int fun(); 与int fun();没有任何区别,如下两个图

4.如果不想让其他.c文件引用本文件中的变量,加上static即可

static表示静态的变量,限制此变量作用域在一个源文件内,其他文件不能用extern来引用此变量,不仅适用于变量,函数也可以。如下图例子,b.c文件就不能引用a.c文件里的静态变量ckx。

5.extern和include的区别

include相当于把include .h文件直接带入到本源文件里,比如在b.c文件里include "a.h",就相当于把a.h文件里所有定义的变量和函数全部拷贝了一份放入了b.c里,一个项目里,一个.h文件可能会被多个.c源文件包含,这样编译的时候就会报重复定义的错误。而且尽量不要在.h里定义变量,这是一个不好的习惯。

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

   
次浏览       
相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程