C++ extern关键字理解
admin
2024-03-12 13:31:41
0

extern是什么及其作用

extern是c++引入的一个关键字,它可以应用于一个全局变量,函数或模板声明,说明该符号具有外部链接(external linkage)属性。也就是说,这个符号在别处定义。一般而言,C++全局变量的作用范围仅限于当前的文件,但同时C++也支持分离式编译,允许将程序分割为若干个文件被独立编译。于是就需要在文件间共享数据,这里extern就发挥了作用。

extern的用法

extern有3种用法,分别如下:

非常量全局变量的外部链接

//fileA.cpp
int i = 1;         //声明并定义全局变量i//fileB.cpp
extern int i;    //声明i,链接全局变量//fileC.cpp
extern int i = 2;        //错误,多重定义
int i;                    //错误,这是一个定义,导致多重定义
main()
{extern int i;        //正确int i = 5;            //正确,新的局部变量i;
}

常量全局变量的外部链接

  常量全局变量默认是内部链接的,所以想要在文件间传递常量全局变量需要在定义时指明extern,如下所示:

//fileA.cpp
extern const int i = 1;        //定义//fileB.cpp                    //声明
extern const int i;

extern "C" 和extern "C++"函数声明

// 声明printf函数使用C链接
extern "C" int printf(const char *fmt, ...);//声明指定的头文件内所有的东西都使用 C 链接
extern "C" {
#include 
}//  声明函数ShowChar和GetChar使用 C 链接
extern "C" {char ShowChar(char ch);char GetChar(void);
}//  定义函数 ShowChar 和 GetChar 使用 C 链接
extern "C" char ShowChar(char ch) {putchar(ch);return ch;
}extern "C" char GetChar(void) {char ch;ch = getchar();return ch;
}// 声明全局变量 errno 为C链接
extern "C" int errno;//又比如,在程序中常见的代码段
#ifdef __cplusplus  
extern "C" {  
#endif  /**** some declaration or so *****/  #ifdef __cplusplus  
}  
#endif//这里__cplusplus是cpp中的自定义宏,定义了这个宏就表明这是一段cpp的代码,也就是说,//上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{和}处理其中的代码。

 

使用extern和包含头文件来引用函数有什么区别?

  与include相比,extern引用另一个文件的范围小,include可以引用另一个文件的全部内容。extern的引用方式比包含头文件要更简洁。extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。

注意事项

  • 不要把变量定义放入.h文件,这样容易导致重复定义错误
  • 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。
  • 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。

相关内容

热门资讯

阿里等三巨头抢朴朴超市?电商要... 作者|白婉嘉 编辑|文定 一场竞购传闻,把朴朴超市推到了台前。 5月25日,多家媒体报道称,阿里、美...
宁波土耳其购房移民机构怎么选? 宁波地区有土耳其购房移民需求的客户群体主要集中在企业主、金融从业者、跨境电商经营者和专业人士等,其核...
芯跳加速时这一红利ETF却半个... 5月28日,芯片半导体和红利方向同步走强,杠杆资金上演哑铃投资新范式。截至10:27,中证红利ETF...
强强携手共谋发展——京东电商平... 5月20日,京东电商平台相关负责人莅临菏泽华运食品公司,开展实地考察与合作洽谈。菏泽华运食品公司总经...
千问正在“夺舍”阿里云 文|象先志 5月26日,阿里云在新加坡面向海外市场发布全新AI产品官网Qwen Cloud、Age...
原创 5... 5月27日黄金价格小幅回落,国内基础金价和中国黄金基础金价均为994.0元/克,黄金回收价为977元...
中汇人寿潍坊中心支公司被罚15... 蓝鲸新闻5月28日讯,近日,国家金融监督管理总局潍坊监管分局公布行政处罚决定书,对中汇人寿保险股份有...
天源迪科:董事长陈友解除留置 天源迪科午间公告,今日,公司收到江西省景德镇乐平市监察委员会签发的《解除留置通知书》,已对公司董事长...
胡衡华,辞去重庆市长职务 5月28日,重庆市人民代表大会常务委员会发布关于接受胡衡华辞职的决定: 据《中华人民共和国地方各级人...
社媒帖子点燃欧洲半导体妖股 晶... 财联社5月28日讯(编辑 赵昊)周三(5月27日),一个鲜为人知的欧洲芯片制造商股价一度暴涨逾70%...
原创 A... 今日A股三大指数集体下跌,截至收盘,上证指数跌1.25%,深证成指跌0.88%,创业板指涨0.07%...
大盘下跌白酒板块又涨了!行业仍... 大盘下跌的时候,白酒板块又“如无意外”地成为资金关注的目标。 5月27日A股跌破4100点时,白酒板...
消费基金重仓科技 合规还是越界... 记者 洪小棠 截至2026年5月27日,A股市场的结构性行情正在以一种近乎撕裂的方式演绎。一边是近年...
人工智能板块延续调整,人工智能... 5月27日,人工智能板块延续调整,截至收盘,中证人工智能主题指数下跌1.8%,中证科创创业人工智能指...
原创 长... 国内存储芯片龙头长鑫科技在5月27日顺利通过科创板上市委审议,距离正式挂牌交易仅剩最后一步。这不仅仅...
南京跑出“数字人第一股”! 8... 「IPO全观察」栏目聚焦首次公开募股公司,报道企业家创业经历与成功故事,剖析公司商业模式和经营业绩,...
“飞轮”之上:财通资管是这样炼... 2001年,知名管理学者吉姆·柯林斯出版了著作《飞轮效应》。这部书描绘了一个常见的商业现象: 在同样...
嘉戎技术收购,宁德时代背书 见习记者刘墨 值得关注的是,宁德时代深度参与本次交易,不仅通过旗下产业基金参与并购主体,宁德时代实控...