1、 基本解释

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

extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之只包括函数名。

#ifdef  __cplusplus
extern "C"
{#endif
/*add function declaration here*/
#ifdef  __cplusplus
}
#endif

Q:为什么会出现这样的代码段呢?
A:个人理解,为了在嵌入式编译环境下(如Keil或者IAR)可以同时支持Cpp文件和C文件!Cpp文件对C文件内的函数引用!C语言不支持extern “C”语法,如果我们想写一个头文件,同时支持被C和C++引用,就可以使用这样的办法,使用C++的宏”__cplusplus”来判断是不是C++编译器,用于指示编译器此段代码应按照C语言进行编译!不懂的话,还请继续往下看!

Q:为什么这段代码就可以起到同时支持Cpp和C文件呢?
A:由于C++支持函数重载,因此编译器在编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名,举例 void func(int x,int y) 会被编译为__func_int_int符号,void func(float x,float y)会被编译为__func_float_float函数;而C语言不支持函数重载!在编译C语言代码的函数时不会带上参数列表中的信息,如函数void func(int x,int y)会被编译为__func符号;所以说如果有遇到一种情况是C++文件需要调用C文件内的函数是,如果不加以extern “C”声明修饰,则会出现C++文件和C文件在链接时,找不到对应的函数体声明,则会报错!

2、extern和static

static 作用范围是内部连接的关系, 和extern有点相反.它和对象本身是分开存储的,extern也是分开存储的,但是extern可以被其他的对象用extern 引用,而static 不可以,只允许对象本身用它. 具体差别:

  • static与extern是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变量
  • static修饰的全局变量声明与定义同时进行,也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了;
  • static修饰全局变量的作用域只能是本身的编译单元,也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它
  • 一般定义static全局变量时,都把它放在原文件中而不是头文件,而extern一般在头文件使用

3、extern和const

C++中const修饰的全局常量据有跟static相同的特性,即它们只能作用于本编译模块中,但是const可以与extern连用来声明该常量可以作用于其他编译模块中, 如extern const char g_str[];然后在原文件中别忘了定义: const char g_str[] = "123456";

原文链接:
https://blog.csdn.net/LeeSincere521/article/details/80361937
https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

C/C++中extern关键字相关推荐

  1. C++中extern关键字使用 http://blog.csdn.net/sruru/article/details/7951019

    C++中extern关键字使用 分类: C++ 语法 2012-09-06 15:37 327人阅读 评论(0) 收藏 举报 c++编译器 chapter 1 . extern关键字的作用 exter ...

  2. C/C++中extern关键字详解

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

  3. C/C++中extern关键字详解与应用

    1.引言:多文件结构中,对全局变量(global variance)的体会 全局变量的好处是毋庸置疑的.方便在各个子模块和局部域中使用.所以,全局变量很适合做众多模块之间的公共交流与通信. 在单文件结 ...

  4. C/C++中extern关键字详解[zz]

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

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

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

  6. C++中extern关键字

    基本作用: 一:extern有两个作用 作用一:当其与"C"一起连用时,如extern "C" void m_simtest(int runtime_t)(注意 ...

  7. [UE4]C++中extern关键字浅谈

    变量声明和变量是有区别的 extern int i; //只是声明i而非定义i int j; //声明而且还定义了j 任何一个显式初始化的声明都将成为定义,而不管有没有extern,extern语句一 ...

  8. c/c++ 中 extern 用法

    c/c++ 中extern 关键字 详细参考http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 基本解释: exte ...

  9. 浅谈C/C++中的static和extern关键字

    一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数.在不同的情况下static的作用不尽相同. (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的 ...

最新文章

  1. spring-cloud:熔断监控Hystrix Dashboard和Turbine的示例
  2. VUE -- Mac上解决Chrome浏览器跨域问题
  3. 硬盘安装WIN7方法
  4. 2017-07-02 前端日报
  5. 如何选择国外虚拟主机空间服务商
  6. 司机行为识别_台州交警上线“闯红灯抓拍神器”人脸识别+4米大屏,拍到违章直接曝光...
  7. flink源码分析_Flink源码分析之深度解读流式数据写入hive
  8. 东北大学文科能学计算机专业吗,东北大学有哪些好专业,文科理科专业分别有哪些...
  9. 201671010135 《面向对象程序设计课程学习进度条》
  10. AD9导入CAD文件做封装外框
  11. 符号执行技术总结(A Brief Summary of Symbol Execution)- wcventure
  12. 计算机主板故障检测装置,计算机主板故障检测装置制造方法及图纸
  13. R-概率统计与模拟(四)拒绝抽样
  14. PS27种图层混合模式
  15. 产品经理如何营销自己
  16. You-get 批量下载
  17. Xamarin.Forms学习之路——黑猫时钟App
  18. BRISQUE UCIQE UIQM
  19. 记FTP链接:Server Reply: SSH-2.0-OpenSSH_8.0
  20. 【转】酒桌上经典劝酒词

热门文章

  1. python语言用途-python编程语言有什么用途
  2. python哪本好-Python入门看哪本书好? 这里有答案
  3. python真的很厉害吗-学会Python后都能做什么?网友们的回答简直不要太厉害
  4. python恶搞-python—做一个恶搞程序
  5. python有相关的证书可以考吗-python后端开发工程师考证试题
  6. python在哪里学比较好-Python学习在哪里比较好?
  7. matlab溢出的标志inf,关于C#:溢出与信息
  8. UVa483 Word Scramble
  9. git error(win下)
  10. CheckBox的使用(一):onCheckedChanged事件