zoukankan      html  css  js  c++  java
  • 内部链接和外部链接【转】

    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)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量

  • 相关阅读:
    JQuery[07]Dom操作
    系统钩子[02] 安装全局鼠标钩子
    [Java动态代理] 设计模式之代理模式
    对话框编程之模态对话框 [03]
    对话框编程之属性对话框 [05]
    [Java反射机制] 通过反射机制创建类的实例并调用其方法
    JQuery[06] 过滤器、相对选择器
    JQuery[04] 节点遍历
    JQuery[13] Ajax的简单应用
    JQuery[09] CSS样式操作/节点操作
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7504365.html
Copyright © 2011-2022 走看看