内部链接与外部链接内部链接与外部链接
首先,我们来了解下定义:
内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它。
外部连接:如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互。
通过对LIB与DLL的讲解,我们可以更方便的理解内部连接与外部连接。
我们了解了一个编译单元(.cpp)编译成obj文件后,至少还会有未解决符号表、导出符号表、地址重定向表。而如果这个名称是内部连接的话,那在导出符号表中不存储它的入口。也就是别的obj...
内部链接与外部链接
首先,我们来了解下定义:
内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它。
外部连接:如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互。
通过对LIB与DLL的讲解,我们可以更方便的理解内部连接与外部连接。
我们了解了一个编译单元(.cpp)编译成obj文件后,至少还会有未解决符号
、导出符号表、地址重定向表。而如果这个名称是内部连接的话,那在导出符号表中不存储它的入口。也就是别的obj文件无法链接到这个名称。而外部连接刚好相反,在导出的符号表中有它入口。
以下情况有内部连接:
a)所有的声明
b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义 c)enum定义
d)inline函数定义(包括自由函数和非自由函数)
e)类的定义
f)名字空间中const常量定义
g)union的定义
以下情况是外部连接:
a)非static全局变量与全局函数
b)类非inline函数总有外部连接。包括类成员函数和类静态成员函数
c)类静态成员变量总有外部连接
d)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量
好了,我们通过程序来深刻的理解吧:
假设有3文件:
TestBase.h: TestRun.cpp
TestError.cpp
int a; #include "TestBase.h"
#include "TestBase.h"
当然还有一个包含main()
的Test.cpp输出的文件。
#include "TestBase.h"
extern int a;
void print()
{
cout << a<
本文档为【内部链接与外部链接】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。