作用:extern关键字可以用来声明变量和函数作为外部变量或者函数供其它文件使用。

  那么使用extern 关键字与直接引用头文件有何不同呢?首先,引用头文件是一种预处理,而 extern 关键字声明在链接层实现;其次,对于大批量引用自然是使用头文件比较方便,但如果我们只是使用个别函数,这时使用 extern 更为直接。

extern声明变量

test.h

test.c

main.c

其中,a、b的声明也可放在main.c中,此时就不需要保函test.h这个头文件了,代码如下:

运行结果:

extern声明函数

test.h

test.c

main.c

同上,函数的声明也可以放在其被调用的源文件中,代码如下:

运行结果:

extern"C"

  extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。

  因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。

示例代码:


  __cplusplus为C++定义的一个宏,此时extern “C”后的部分的代码按C语言的格式进行编译,而不是C++。

C语言之extern关键字探究相关推荐

  1. 【C语言】extern 关键字

  2. 【C语言】20-static和extern关键字2-对变量的作用

    说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 上一讲介绍了static和ex ...

  3. c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!

    不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域.这篇小文介绍2个比较重要的关键字:static和extern. static和extern不仅可以用在变量上,还可以用在函数上.这讲先介绍 ...

  4. c语言extern关键字详解

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

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

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

  6. c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!

    上一篇文章介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量 ...

  7. 【C++】从extern关键字开始谈C语言多文件编程

    extern 关键字 我们知道,C语言代码是由上到下依次执行的,不管是变量还是函数,原则上都要先定义再使用,否则就会报错.但在实际开发中,经常会在函数或变量定义之前就使用它们,这个时候就需要提前声明. ...

  8. C语言函数(函数嵌套、递归调用)+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+内部函数外部函数

    上一篇文章:编译预处理知识点梳理:宏定义+文件包含+条件编译 C语言函数(函数嵌套.递归调用--+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+ ...

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

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

最新文章

  1. IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
  2. 使用Xftp5连接云服务器
  3. 前端面试汇总(Bootstrap框架)
  4. php算法两数之和 复杂度,每天一道leetcode算法题:两数之和-php版
  5. Eric Pement的单行awk命令收集
  6. 「支持m1」自定义菜单键盘快捷键——CustomShortcuts for mac
  7. 全新Linux+Python高端运维班第一次作业
  8. ICCV2019-FSGAN:实现任意两张人脸图片换脸的GAN方法
  9. Understand Rails Authenticity Token
  10. 1047: 对数表 C语言
  11. JDK版本切换——JDK1.1.1
  12. python字符串格式化是什么意思_Python字符串格式化中%s和%d之间有什么区别?...
  13. 养老保险和住房公积金如何转移
  14. 计算机右键菜单更换顺序,电脑图标排列顺序怎么自己改变了
  15. 分析30万条微博评论,看毕业生与翟天临的爱恨情仇|数据会说话
  16. 用GCTA计算亲缘关系矩阵和遗传力
  17. 隆重推荐几本幼儿教育的书籍
  18. Google浏览器网页,大部分网页出现无法加载样式
  19. ZCU106 裸机NR SHELL移植
  20. 3种常用系统制作ubuntu U盘安装盘

热门文章

  1. jenkins安装部署全过程(linux)
  2. mysql查询前段时间_没想到!我在简历上写了“精通MySQL”,阿里面试官跟我死磕后就给我发了高薪offer...
  3. meta标签以及一些基本标签
  4. jquery常用事件——幕布
  5. BZOJ5251 八省联考2018劈配(网络流)
  6. Oracle数据库时间修改
  7. 4-算法 与7无关的数最近的提交
  8. centos7默认字体_CentOS7终端的分辨率和字体修改
  9. Python合并多幅静图为GIF动图
  10. Python老师遇到的那些无语的问题