C/C++ 内部连接与外部连接

编译单元:

  当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有必要信息的单个源文件,这个源文件就是一个编译单元。

  这个编译单元会被编译成为一个与cpp文件名同名的目标文件(.o或是.obj)。连接程序把不同编译单元中产生的符号联系起来,构成一

  个可执行程序。

自由函数

  如果一个函数是自由函数,那么这个函数不是类的成员函数,也不是友元函数。

内部连接:

  如果一个名称对于它的编译单元来说是透明的,并且在连接时不会与其它编译单元中的同样的名称相冲突,那么这个名称有内部连接

  (注:有时也将声明看作是无连接的,这里我们统一看成是内部连接的)。

以下情况为内部连接:

  a)所有的声明

  b)名字空间(包括全局名字空间)中的静态自由函数、静态友元函数、静态变量的定义

  c)enum定义

  d)inline函数定义(包括自由函数和非自由函数) 。内部连接的一个好处是这个名字可以放在一个头文件中而不用担心连接时发生冲突。

  e)类的定义

  f)名字空间中const常量定义

  g)union的定义

外部连接:

  在一个多文件程序中,如果一个名称在连接时可以和其它编译单元交互,那么这个名称就有外部连接。

以下情况有外部连接:

  a)类非inline函数总有外部连接。包括类成员函数和类静态成员函数

  b)类静态成员变量总有外部连接。

  c)名字空间(包括全局名字空间)中非静态自由函数、非静态友元函数及非静态变量

  下面举例说明:

  a)声明、enum定义、union定义有内部连接

  所有的声明、enum定义及union定义在编译后不会产生连接符号,也就是在不同编译单元中有相同名称的声明及enum、union

  定义并不会在连接时发生发现多个符号的错误。

http://www.cnblogs.com/ForFreeDom/archive/2012/05/28/2520873.html

时间: 2024-08-10 02:10:58

C/C++ 内部连接与外部连接的相关文章

内部连接和外部连接

声明和定义 声明 是将一个名称引入一个程序. 定义 提供了一个实体在程序中的唯一描述. 声明在单个作用域内可以重复多次(类成员除外),定义在一个给定的作用域内只能出现一次. 一个定义就是一个声明,除非: 它定义了类的一个静态数据成员. 它定义了类的非内联成员函数. 内部连接和外部连接 当一个实现文件(.cpp ...)编译时,预处理器(CPP)首先递归的包含头文件,形成一个保含有所有必要信息的单个源文件. 这个源文件称为 编译单元. 内部连接 如果一个名称对于它的编译单元来说是局部的, 并且在连

C++中的内部连接和外部连接

首先,由global变量引出我们今天的问题: C++中global变量是全局可见的,可以在不同的compilation unit(编译单元)中使用. 如下两个文件: 1.cpp int a = 1; 2.cpp #include<iostream> extern int a; int main() { std::cout<<a<<std::endl;//输出1 } _____________________________________________________

linux之SQL语句简明教程---外部连接

之前我们看到的左连接 (left join),又称内部连接 (inner join).在这个情况下,要两个表格内都有同样的值,那一笔资料才会被选出.那如果我们想要列出一个表格中每一笔的资料,无论它的值在另一个表格中有没有出现,那该怎么办呢?在这个时候,我们就需要用到 SQL OUTER JOIN(外部连接) 的指令. 外部连接的语法是依数据库的不同而有所不同的.举例来说,在 Oracle 上,我们会在 WHERE子句中要选出所有资料的那个表格之后加上一个 "(+)" 来代表说这个表格中

jQuery Mobile 连接外部连接或切换动画

jQuery Mobile不同网页之间的跳转问题 jQuery Mobile,一个新的手机终端脚本开发库,从名字可以看出,它是基于jQuery:目前支持很多种手机设备,包括IOS/Android/BlackBerry/Windows Phone等,当然,支持程度不一,具体可以看:http://jquerymobile.com/gbs/ 由于这项目比较新,在我写这文章的时候,目前还是1.0 ALPHA4.1 RELEASED版,官网提供下载的只有jQuery Mobile的JS和CSS,相关文档目

自然连接,外部连接,内连接,左右连接的区别与介绍(转)

不去外面的世界都不知道自己的数据库是那么的垃圾,连难一点的sql语句都不会写,悲催. 假设有A,B两个表. 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408 ------------------------------------

配置postgreSQL允许外部连接

配置远 程连接PostgreSQL数据库的步骤很简单,只需要修改 %PostgreSQL_path%/data 目录下的 pg_hba.conf 和 postgresql.conf. 一.修改pg_hba.conf:配置对数据库的访问权限 添加 host    all         all         192.168.80.1/24        md5这行的意思是允许所有 192.168.80.*** 这样ip访问本机postgreSQL服务. 二.修改postgresql.conf:配

python脚本获取服务器外部连接IP并取出非本地服务器程序有关联的IP

#!/bin/env python #-*- coding:utf-8 -*- import os import sys from subprocess import Popen def get_foriegn_ip():         l = os.popen("netstat -ant|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort -r|uniq -c |awk '{print $2}'|grep -v 'and'|

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

from here 首先,我们来了解下定义: 内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时候其他的编译单元无法链接到它. 外部连接:如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互. 通过对LIB与DLL的讲解,我们可以更方便的理解内部连接与外部连接. 我们了解了一个编译单元(.cpp)编译成obj文件后,至少还会有未解决符号表.导出符号表.地址重定向表.而如果这个名称是内部连接的话,那在导出符号表中不存储它的

风险评估流程

风险评估准备 a)确定风险评估的目标: 根据满足组织业务持续发展在安全方面的需要.法律法规的规定等内容,识别现有信息系统及管理上的不足,以及可能造成的风险大小. b)确定风险评估的范围: 风险评估范围可能是组织全部的信息及与信息处理相关的各类资产.管理机构,也可能是某个独 立的信息系统.关键业务流程.与客户知识产权相关的系统或部门等. c)组建适当的评估管理与实施团队: 风险评估实施团队,由管理层.相关业务骨干.IT技术等人员组成风险评估小组.必要时,可组 建由评估方.被评估方领导和相关部门负责