C++ 的 Linkage

在 c++ 代码运行之前,编译器和连接器的需要完成它们的工作。至于编译器和连接器是如何运作,本文就不作叙述。如果想要程序能够顺利地跑起来,我们需要了解 C++ 中的三个至关重要的概念 - translation unit (编译单元,下面简称 TU) 、one definition rule (定义一次规则,下面简称 ODR) 和 linkage (连接) 。所谓的 TU 就是每个 sourc...
摘要由CSDN通过智能技术生成

链接

在 C++ 代码运行之前,编译器和连接器的需要完成它们的工作。如果想要程序能够顺利地跑起来,我们需要了解 C++ 中的两个个至关重要的概念 translation unit (编译单元,简称 TU)one definition rule (定义一次规则,下面简称 ODR)

所谓的 TU 就是一个 source file (源文件) 和 它所引用的 header files (头文件) 。而 linkage (链接) 可以理解为一个变量或者一个函数是否只作用于某个 TU 。


内部链接

而链接又分为 internal linkage (内部连接)external linkage (外部链接) 。内部连接,顾名思义,如果一个变量是属于内部连接的话,那么它在每一个 TU 里面都是独一无二的。只要满足以下条件,对象的链接方式均为内部连接[^1]:

  • const object (如 const int*const double 等等)
  • constexpr objects (如 constexpr char*)
  • typedefs
  • static objects in namespace scope (如全局 static int age)

在 a.h 文件中声明并初始化 const int* iptr ,然后被包含到不同的 TU 中。我们不难发现每个独立的 TU 都有自己的一个 iptr ,它们互不干扰互不影响。

// a.h
const int* iptr = new int(111); 

//a.cpp
#include "a.h"
void scope_a()
{
   
    std::cout <<  *iptr << "\n";
}

// b.h 为空文件
// b.cpp
#include "b.h"
#include "a.h"
void 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值