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++