链接

1)          启动模块

创建C/C++程序时,链接器会链接启动模块,这个初始化程序会建立堆栈,初始化变量。

2)          库函数

尽量使用C/C++标准库函数,实在没有,也尽量使用符合

POSIX可移植性标准的函数。

3)          内部链接

如果一个名称对于它的编译单元(cpp)来说是局部的,并且在链接时不会与其它编译单元(cpp)中同样的名称相冲突,那么称这个名称有内部链接。

 

内部链接不可能通过extern变量去访问位于其他编译单元定义的变量。

(注意:有时也将声明看作是无链接的,这里我们统一看成是内部链接的)

l       所有的声明

声明举例请参考

http://blog.csdn.net/yeming81/archive/2010/05/31/5637695.aspx

 

l       命名空间(包括全局空间)中的静态函数、静态友元函数、静态变量的定义

各个命名空间中的名称不会冲突,所以是内部链接。全局的静态函数是内部链接,因为static控制作用域在本文件(编译单元)中。

l       enum定义

l       struct定义

l       union的定义

l       inline函数定义

包括全局和类里面定义的。如果有两个同名的函数,会出现链接错误。加上inline就可以了,因为内部链接的缘故。

l       类的定义

也就是说在不同的文件里出现同名的类是不会出现链接错误的,因为名字不冲突。这也是为什么include同一个class定义不会报错的原因。

l       命名空间中const常量定义

也就是说在不同的文件里出现同名的常量是不会出现链接错误的,因为名字不冲突。

 

4)          外部链接

除了内部链接都属于外部链接,举例如下:

l       类的非inline函数定义

如果在A.cpp中有类A的定义,B.cpp也有类A的定义。没问题,因为类的定义属于内部链接。但是,如果A类有一个非inline函数Func1B中的A类也有一个同名的函数Func1,这时候就出现链接错误。

 

l       类的静态变量的定义

如果不同文件的同名类含有同样名字的静态变量,链接时出错。

 

l       全局函数(非static)和变量(非const

 

l       命名空间

 

5)          无链接

只有那些在链接或装载期间有地址的元素,才有链接。比如类声明或局部变量就无链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值