下载此文档

内部链接与外部链接.doc


文档分类:IT计算机 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
内部链接与外部链接首先,我们来了解下定义:内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它。外部连接:如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互。通过对LIB与DLL的讲解,我们可以更方便的理解内部连接与外部连接。我们了解了一个编译单元(.cpp)编译成obj文件后,至少还会有未解决符号表、导出符号表、地址重定向表。而如果这个名称是内部连接的话,那在导出符号表中不存储它的入口。也就是别的obj文件无法链接到这个名称。而外部连接刚好相反,在导出的符号表中有它入口。以下情况有内部连接:a)所有的声明b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义c)enum定义d)inline函数定义(包括自由函数和非自由函数)e)类的定义f)名字空间中const常量定义g)union的定义以下情况是外部连接:a)非static全局变量与全局函数b)类非inline函数总有外部连接。包括类成员函数和类静态成员函数c)类静态成员变量总有外部连接d)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量好了,我们通过程序来深刻的理解吧:假设有3文件::;#include""#include""当然还有一个包含main()。#include""externinta;voidprint(){cout<<a<<endl;}分别编译TestRun与TestError我相信大家都能通过编译,但是你链接的时候肯定会出错的,提示的信息有一句为:Debug/:fatalerrorLNK1169:oneormoremultiplydefinedsymbolsfound(一个或多个定义符号被发现)。因为非static的全局变量是外部连接的,(别问我为什么导出了它,因为编译器默认对非static全局变量都导出了,想知道怎么实现的,可以去找Microsoft)。,所以链接肯定会出错的。。马上能编译与链接成功,并输出0,其实是因为static全部变量是内部连接的,obj文件的导出符号表中没有提供a符号的入口。,,所以大家只需要知道你声明或定义的名称是内部连接还是外部连接,。你就会明白语法其实也就那么回事了。让我们在来了解class里的static变量和非static函数是什么样子的。class是内部连接的,这就是为什么可以有多个cpp文件能包含它的原因了,但是如果我在class里写了个static变量了,那这个变量就是

内部链接与外部链接 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小18 KB
  • 时间2019-12-21