C++ 关键字 extern


extern 是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。


1、extern 变量

B文件使用A文件的变量:

// 在A文件定义一个变量:
int a = 0;// 在B文件声明变量:
extern int a;
  • 共享的变量定义只能出现一次,但可以在不同文件中声名多次
  • 定义共享变量必须初始化
  • 声名共享变量时不能初始化
  • extern int a = 0;是定义变量,而不是声名

2、extern 函数

B文件使用A文件的函数:

实际上函数的声明和定义都不需要添加extern关键字,在实际使用的时候也最好不要添加关键字。函数加extern 可以取代 include “*.h” 来声明函数。

// 下面两个函数定义等价
extern int func(void)
{return 0;
}int func(void){return 0;
}// 下面两个函数声名等价
extern int func(void);int func(void);

3、extern const 变量

共享常变量:

常变量默认是静态声明的,所以定义和声名常变量多要加extern

// 在A文件定义一个变量:
extern const int a = 0;// 在B文件声明变量:
extern const int a;

4、extern “C”

在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,通过 extern “C” 显示声名用C语言规则编译该函数。

// 在.h文件的开头的地方
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
…
程序语句
…
//.h文件结束的地方
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

C++ 关键字 extern相关推荐

  1. C语言的关键字 extern

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105112033 C ...

  2. C语言-外部关键字extern

    extern 关键字  extern 用在全局变量或函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用.  什么是定义,什么是声明?       什么是定义:所谓的定义就是为这 ...

  3. C# 关键字extern用法

    C# 关键字extern用法 修饰符用于声明在外部实现的方法.extern 修饰符的常见用法是在使用 Interop 服务调入非 托管代码时与 DllImport 属性一起使用:在这种情况下,该方法还 ...

  4. 关键字extern用法

    extern作用:在某个.cpp文件中存在这么一个函数/全局变量 声明外部函数 在a.cpp中使用b.cpp中函数,需要在a.cpp中函数使用之前用extern修饰函数声明. a.cpp #inclu ...

  5. c语言关键字extern作用,C语言中extern关键字详解

    <C语言中extern关键字详解>由会员分享,可在线阅读,更多相关<C语言中extern关键字详解(5页珍藏版)>请在人人文库网上搜索. 1.C 语言中 extern 关键字详 ...

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

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

  7. c语言定义全局变量的关键字,C语言关键字extern

    修饰对象:全局变量.函数 作用: 1.提示编译器在其他模块或者其他文件中查找该变量.函数的定义 2.可以引用定义在其他文件中的全局变量和函数 用法:先声明,再初始化,后调用. 1.声明形式:声明时要严 ...

  8. C语言关键字extern

    一.前言 最近写一个代码,编译时老是出现:multiple definition,想到太恼火了,那就枚举一下可能出现的情况,再总结一下. 二.代码 编译环境:gcc version 9.4.0 (Ub ...

  9. C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)

    1. 变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储.变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; ...

最新文章

  1. linux必会命令 - 后台运行程序 - nohup、
  2. 我的学习之路_第十八章_SQL语句
  3. 【干货】从国外知名网站看用户体验4个基本标准
  4. mysql 1157_更新时出现MySQL错误1157,但是我在where子句中使用主键
  5. torch.nn.Embedding()的固定化
  6. mongodb集群linux日志分割,Linux下Mongodb数据库日志切割及定时删除
  7. js的隐含参数(arguments,callee,caller)使用方法
  8. 水晶报表中图片不显示解决方案
  9. Linux平台开源浏览器
  10. 正则表达式之Matcher类中group方法
  11. 惊喜来袭~进阶版《看漫画学Python 2:有趣、有料、好玩、好用》
  12. c语言文献,关于计算机C语言的外文文献
  13. [论文总结] 深度学习在农业领域应用论文笔记7
  14. (原创)使用AsyncTask(带修改线程池方式)+自定义ImageLoader+LRU算法对图片三级缓存及其显示优化(只有在ListView滑动停止的时候才去网络请求获取图片数据)
  15. js日期加横杆_把日期横杠转化为斜杠
  16. Android 文件系统获取root权限和重新挂载根目录为可读写
  17. 机器人磨内孔_半导体阀块内孔机器人打磨,效果超乎想象!
  18. 速卖通代运营可靠吗?如何正确选择代运营?
  19. 【笔记分享】RS触发器
  20. Failed to load resource:the server responded with a status of 404()

热门文章

  1. 重构机房VB.NET机房收费系统个人重构版你都学会了什么(之一)
  2. objective-C Blocks 讲解
  3. Winfrom实用代码项目
  4. 带排序动画的横向条形图
  5. C++入门经典-例7.8-const对象,标准尺寸
  6. 在VS2013中打开Nuget
  7. WCF热带鱼书学习手记 - Service Contract Overload
  8. 软件学院学习体验之三
  9. ironpython使用opencv_连这些都不知道,就别说自己懂Python!
  10. Matlab 2022a 安装教程(手把手式教程 超简单)