内部链接和外部链接【转】

from here

首先,我们来了解下定义:

内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它。

外部连接:如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互。

通过对LIB与DLL的讲解,我们可以更方便的理解内部连接与外部连接。

我们了解了一个编译单元(.cpp)编译成obj文件后,至少还会有未解决符号表、导出符号表、地址重定向表。而如果这个名称是内部连接的话,那在导出符号表中不存储它的入口。也就是别的obj文件无法链接到这个名称。而外部连接刚好相反,在导出的符号表中有它入口。

以下情况有内部连接: 内部链接要是实现在自己内部,那么每次调用都每次实现,不会分不清!
a)所有的声明
b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义
c)enum定义
d)inline函数定义(包括自由函数和非自由函数)
e)类的定义
f)名字空间中const常量定义
g)union的定义

以下情况是外部连接: 外部链接就必须要写到一个cpp文件内,这样会出在一个导出表中,其他函数比如main函数可以找到入口进行应用。如果是多个cpp文件那么就不知道入口在哪里! 不确定是那个cpp文件的

a)非static全局变量与全局函数

b)类非inline函数总有外部连接。包括类成员函数和类静态成员函数
c)类静态成员变量总有外部连接
d)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量

时间: 2024-10-13 11:52:23

内部链接和外部链接【转】的相关文章

内部链接和外部链接以及const对象在头文件中的若干问题

首先我们看一段示例代码: t1.h [cpp] view plaincopyprint? #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif #ifndef T1_H_ #define T1_H_ #include "t2.h" #ifndef HHH #define HHH int da = 5; #endif #endif t2

C++编译与链接(2)-浅谈内部链接与外部链接

发现每次写技术博客时,都会在文章开头处花费一番功夫 ...从前,有一个程序员....他的名字叫magicsoar 为什么有时会出现aaa已在bbb中重定义的错误? 为什么有时会出现无法解析的外部符号? 为什么有的内联函数的定义需要写在头文件中? 为什么对于模板,声明和定义都在写在一起? 读完这篇博客,相信你会有一个初步的认识 注,我们现在谈的编译其实可以认为由4个环节组成,其中有编译环节,链接环节, 我会尽量在上下文中指明说的总体的编译,还是具体的编译环节,望读者周知 关于编译过程详解说明,可以

第4例——c++的内部链接和外部链接

内部连接:假如一个名称对于他的编译单元来说是局部的,并且在连接时不会和其他编译单元中的同样的名称相冲突,那么这个名称有内部连接(注:有时也将声明看作是无连接的,这里我们统一看成是内部连接的). 以下情况有内部连接: a)任何的声明 b)名字空间(包括全局名字空间)中的静态自由函数.静态友元函数.静态变量的定义 c)enum定义 d)inline函数定义(包括自由函数和非自由函数) e)类的定义 f)名字空间中const常量定义 g)union的定义 外部连接:在一个多文档程式中,假如一个名称在连

网站外部链接增加方式

今天早上有问朋友对于网站外部链接建设产生了疑问.他说:想问下外链会自己增加的么?比如我在问答平台和博客上发了50条外链,是不是有会过几天后着50条链接变成100条了? 1.什么是网站外部链接? 首先我们要了解什么是一个网站的外部链接,中主动和别人交换友情链接其实也是属于外部链接建设的一种方式.说白了网站的外部链接就是在别人网站上留下我们网站河南金凯元郑州会计培训如果成功在别人网站上留下这个域名地址那么这中方式就是网站外部链接. 2.为什么要做网站外部链接? 首先我们要了解一个好的网站第一就是有能

PHP过滤外部链接及外部图片 添加rel="nofollow"属性

原来站内很多文章都是摘录的外部文章,文章里很多链接要么是时间久了失效了,要么就是一些测试的网址,如:http://localhost/ 之类的,链接多了的话,就形成站内很多死链接,这对SEO优化是很不利的.那么就需要对站点内的内容进行过滤,将不是内部链接的链接加上 rel="nofollow"属性. 网上找到了wordpress的过滤外部链接的函数,将其改一下即可使用 //外部链接增加nofllow $content 内容 $domain 当前网站域名 function content

vue-打包为webapp,如何解决应用内跳转外部链接返回导致退出应用

思想:1.应用内部跳转至外部链接时,需处理为打开带原生导航栏的新页面 2.在原生导航栏中处理回退,为了回退后不直接退出应用,需执行其他操作,据hbuilder-窗口管理-关闭页面叙述: http://dev.dcloud.net.cn/mui/window/ mui.back()仅处理窗口逻辑,若希望在窗口关闭之前再处理一些其它业务逻辑,则可将业务逻辑抽象成一个具体函数,然后注册为mui.init方法的beforeback参数          mounted(){ let _this = th

微信公众号中添加外部链接地址的图文教程

2017-9-18,长沙,有点闷,有点热. 本教程教大家如何在微信公众号中,添加外部的链接,网络有很多教程,但由于表述不太清楚,出个教程吧.最终实现在微信后台管理平台"原文链接"处插入外部链接,用户点击发布好的图文文章底部左下角的"阅读原文",就可以跳转到您添加的外部链接页面中去. 第1步. 使用微信公众管理帐号登陆微信管理后台 > 素材管理 > 图文消息 >  新建图文消息或者编辑文章都可以,如下图所示: 第2步. 之后,将页面向下拉,看到底部&

使用python实现将截图上传到七牛服务器,并将七牛生成的外部链接添加的剪切板的功能

目的:在使用markdown来记录文档时,不必每次都将截图存到文档中,只需将图片链接存放到文档中,此时就想到了需要使用云服务器和自动上传文件的功能 OS: Ubuntu 15.10 version 0.1: 工具:截图工具shutter, 剪切板操作工具: xsel 源代码: 1 #!/usr/bin/python 2 import time ##时间模块,使用时间戳生成唯一的文件名 3 import commands ##python中的执行shell命令的模块 4 import os ##同

Pyqt 打开外部链接的几种方法

Pyqt 触发一个事件,打开外部链接,我找到了这个方法,供大家参考 1. QDesktopServices 的openUrl 方法 1 QtGui.QDesktopServices.openUrl(QtCore.QUrl('http://www.hao123.com')) 2.Python 自带的webbrowser 浏览器控制模块 webbrowser提供了三种方法 1 import webbrowser 2 webbrowser.open(url, new=0, autoraise=True