1.引用同一个文件中的变量

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

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

如果我不想改变num的声明的位置,但是想在main函数中直接使用num这个变量,怎么办呢?可以使用extern这个关键字。像下面这一段代码,利用extern关键字先声明一下num变量,告诉编译器num这个变量是存在的,但是不是在这之前声明的,你到别的地方找找吧,果然,这样就可以顺利通过编译啦。但是你要是想欺骗编译器也是不行的,比如你声明了extern int num;但是在后面却没有真正的给出num变量的声明,那么编译器去别的地方找了,但是没找到还是不行的。

下面的程序就是利用extern关键字,使用在后边定义的变量。

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

2.引用另一个文件中的变量

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

main.c:

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

b.c:

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

这里b.c中定义了一个变量num,如果main.c中想要引用这个变量,那么可以使用extern这个关键字,注意这里能成功引用的原因是,num这个关键字在b.c中是一个全局变量也就是说只有当一个变量是一个全局变量时,extern变量才会起作用,向下面这样是不行的

下面这种方式变量不是全局变量,extern变量不会起作用:

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关键字只需要指明类型和变量名就行了,不能再重新赋值,初始化需要在原文件所在处进行,如果不进行初始化的话,全局变量会被编译器自动初始化为0。像这种写法是不行的。

extern int num=4;

但是在声明之后就可以使用变量名进行修改了,像这样:

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

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

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

b.c:

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

3.引用另一个文件中的函数

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

mian.c:

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

b.c:

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

这里main函数中引用了b.c中的函数func。因为所有的函数都是全局的,所以对函数的extern用法和对全局变量的修饰基本相同,需要注意的就是,需要指明返回值的类型和参数。

C语言extern关键字的作用相关推荐

  1. C语言extern关键字

    C语言正确使用extern关键字 利用关键字extern,可以在一个文件中引用另一个文件中定义的变量或者函数 extern关键字,C语言extern关键字用法详解

  2. c语言关键字extern作用,c语言extern关键字详解

    标签: 在c语言中代码的执行顺序是从上往下执行的,如果定义的函数或者变量在调用之后,那么调用的时候编译就会找不到需要使用的变量.这样就会出现错误,如下代码: #include int main(){ ...

  3. C++中extern关键字的作用

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

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

    参考:C语言正确使用extern关键字 作者:xingjiarong 发布时间:2015-08-14 08:37:33 网址:https://blog.csdn.net/xingjiarong/art ...

  5. extern 关键字的作用

    extern关键字一般放置于变量或函数前,用于标示变量或函数的定义在别的文件中.当编译器遇到此变量和函数时在其他模块中寻找其定义. 1. 当出现extern "C"的时候: 主要作 ...

  6. c语言 static 关键字的作用

    static 关键字的作用 全局静态变量 局部静态变量 静态函数 类的静态成员 类的静态函数 全局静态变量 在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量. 静态存储区,在整个 ...

  7. c语言extern关键字详解

    在c语言中代码的执行顺序是从上往下执行的,如果定义的函数或者变量在调用之后,那么调用的时候编译就会找不到需要使用的变量.这样就会出现错误,如下代码: #include<stdio.h>in ...

  8. C语言应用笔记(六):C语言extern关键字及其使用

    C 语言中,修饰符 extern 用在变量或者函数的声明前面,用来标识变量或函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其他文件中寻找其定义.下面对 extern 关键字的几种用法进行说明 ...

  9. C语言学习及应用笔记之六:C语言extern关键字及其使用

    在C语言中,修饰符extern用在变量或者函数的声明前,用来以标识变量或者函数的定义在别的文件中,提示编译器遇到此变量或者函数时,在其它文件中寻找其定义.extern关键字的用法有几种,我们下面对其进 ...

最新文章

  1. 利用c语言检测气体浓度,一氧化碳气体检测仪的算法设计
  2. 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的
  3. XXL-REGISTRY v1.0.2 发布,分布式服务注册中心
  4. day12装饰器进阶
  5. Poj2480欧拉函数
  6. Spring之JDBCTemplate
  7. 2016年《大数据》高被引论文Top10
  8. C语言scanf函数详解和示例
  9. 用好Visual Studio 2010进行层架构设计
  10. Python中用户管理(用户的登陆、用户的增删改查)
  11. spring核心:bean工厂的装配 3
  12. Python dir、__builtin__内置函数
  13. neo4j 学习笔记
  14. Veritas Backup Exec 21安装
  15. Wemos基础项目之---基于WemosD1接入家庭wifi打印IP地址
  16. ArcGIS 正高转换成椭球体高度
  17. Python模块和包的导入
  18. 哥德巴赫猜想c#语言,哥德巴赫猜想 C#
  19. 自然语言处理工具之 HanLP 鸟瞰
  20. python非线性可分支持向量机模型(实现iris分类)

热门文章

  1. 用磁带录音机发射收音机接收信号的对讲机
  2. The Wisdom of Insecurity by Alan W. Watts
  3. android测试测试模拟器,模拟和测试其他浏览器
  4. 怎样解互联网公司笔试中的逻辑推理题
  5. Java 实现数据库导出Word
  6. Unity学习笔记3:Camera、Skybox
  7. linux安装fcitx中文输入法,解决没有候选项的问题(debian10)
  8. 数据泄密事件触目惊心, 看麒麟信安天机存储加密系统如何安全守护?
  9. 【山外笔记-四级计算机网络】第1章 网络技术基础
  10. hrbustoj 1681 回文串 [BIT]【字符串hash】