在命名空间中定义并在多个翻译单元中使用的变量的链接

Posted

技术标签:

【中文标题】在命名空间中定义并在多个翻译单元中使用的变量的链接【英文标题】:Linkage of a variable defined in a namepace and used in multiple translation units 【发布时间】:2017-10-07 01:40:07 【问题描述】:

    在 C 语言中,要在多个翻译单元中使用一个变量,我们需要 确保变量具有外部链接。

    类似地,在 C++ 中,如果我想要在命名空间中定义的变量用于 多个翻译单元,变量是否必须具有外部 连锁?如何正确使用命名空间和链接?

    命名空间中定义的变量的默认链接是什么?

谢谢。

【问题讨论】:

命名空间与链接无关。总的来说,C++在这方面的规则和C是一样的。 ... 匿名命名空间除外 【参考方案1】:

它的工作方式与 C 相同,除了它周围有 'namespace xyz ',所以在你的标题中,你会有:

namespace xyz extern int myglobal;

在你定义它的源文件中,它的存储和初始化它,你会拥有

namespace xyz int myglobal = 0;

我会说,作为一个切线风格的评论,以这种方式使用全局变量在 C++ 中确实不是很常见;通常有更好的方法来创建共享全局状态,例如静态类成员(它允许您通过将其设置为受保护/私有并通过静态成员函数限制访问来创建访问限制)。

【讨论】:

以上是关于在命名空间中定义并在多个翻译单元中使用的变量的链接的主要内容,如果未能解决你的问题,请参考以下文章

C++ 项目相关知识命名空间

链接阶段的多重定义错误

未命名的命名空间访问规则

C++变量(C++变量定义变量赋值命名规则)

C++变量(C++变量定义变量赋值命名规则)

模板变量是不是允许在多个翻译单元中并有效合并?