编译链接 C++

预处理之后的源文件被称为一个编译单位,也即编译器的工作对象。为了使编译能够进行,程序员必须提供各种程序其他部分的声明来孤立分析一个编译单位。所有名字空间,类,函数都应该在他们所在的编译单位中有声明,所有的声明都应当引自一个同一个实体(定义)--------------c++程序设计语言


这样看来 步骤是这样的 每个编译单位独立的编译(依靠声明来得到程序其他部分的信息),之后进行链接

这里有一些规则(如果一个名字可以在与其定义所在的编译单位不同的文件中使用,则称是可以外部链接)

//static修饰函数和变量都是没有外部链接的
//const修饰变量没有外部链接,但是加上了extern就开放了外部链接
//const修饰返回值存在外部链接,(在返回值的前面,后面都一样)
//inline修饰函数没有外部链接
//typedef没有外部链接
//没有外部链接会使得变量局限于一个编译单位,无名命名空间也可以达到切断外部链接的效果
extern用来指定声明

如extern int x;是指x的定义存在于其他的编译单位中

如果我们写 extern int x=1;那这里就不仅仅是声明了,编译器就将其认定为一处定义(在其他的编译单位中存在另外的定义就会引起错误)


原文地址:https://www.cnblogs.com/odin-luyu/p/5371770.html