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基础认知
    CentOS6.5下samba服务
    [转载]二叉树查找
    更好的理解索引
    【转载】数据库表空间
    [转载]数据库对象
    数据库schema的简介
    [转载]oracle物化视图
    oracle物化视图
    [转载]oracle位图索引
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7504365.html
Copyright © 2011-2022 走看看