编译器相关

ODR

全称:one definition rule

定义:ODR是一系列规则

基本上,每个变量、函数、概念、类、模板(C++20)在每个转换单元中只允许一个定义。

特别注意*:非inline的函数或变量(C++17)在整个程序中有且只有一个定义

例外

const、static、inline这三个声明定义的变量或函数都能有多个定义

转换单元

定义:我们写好的每个源文件,将其所包含的头文件合并后,称为一个转换单元

翻译器将每一个转换单元生成对应的obj文件(obj文件即对象文件),obj文件包含了转换单元的机器码和引用信息,引用信息包括在这个转换单元内定义的对象和不在这个转换单元内定义的对象

最后链接器将各个转换单元的obj文件链接起来,生成目标程序

如果在对象文件A中包含了定义在其他转换单元中的引用,那么链接器就会去转换单元中找这个引用的定义来建立链接,如果找不到,就会生成一个链接错误的指令

extern void test();
int main()
{
    test();
}

这里就会生成一个链接错误的指令LNK201

未定义行为

含义:C++

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值