首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用extern在文件之间共享const时,为什么定义需要extern?

当使用extern在文件之间共享const时,为什么定义需要extern?
EN

Stack Overflow用户
提问于 2014-10-10 01:09:23
回答 1查看 302关注 0票数 1

C++初级版第5版第60页讨论如何在文件之间共享const变量,如下所示

代码语言:javascript
运行
复制
//file_1.cc
extern const int bufSize = fcn();

//file_1.h
extern const int bufSize;

什么时候定义bufSize ?在file_1.cc上外挂的目的是什么?我知道file_1.cc会定义它,但是同一本书的第45页说,为变量提供初始化程序会覆盖外挂程序,那么为什么有必要在const的定义上有extern呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-10 01:22:13

根据标准,

具有名称空间作用域(3.3.6)的名称如果名称为.一个非易失性变量,显式声明为constconstexpr,既未显式声明extern,也未先前声明为具有外部链接。

因此,有一条特殊的规则,即当constconstexpr存在时,名称空间作用域上的变量具有内部链接,即使它们本来会有外部链接。我不完全确定这个规则为什么存在,但我怀疑它允许编译器内联const变量,因此根本不为它们分配任何存储空间。extern说明符显式地重写了这一点,并使变量再次具有外部链接。

为变量提供初始化程序,将重写外接程序。

现在这有点不同了。默认情况下,变量的声明也是一个定义,但是extern会取消这一点,这样您就可以在不定义变量的情况下声明变量(也就是说,因为它的定义位于另一个转换单元中)。但是,如果您有一个初始化器,那么它将重写extern,并且声明再次成为一个定义。这与上面关于内部和外部联系的规则并没有什么关系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26290383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档