| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1303 人关注过本帖
标题:什么是内部连接和外部连接
只看楼主 加入收藏
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
 问题点数:0 回复次数:6 
什么是内部连接和外部连接
什么是内部连接和外部连接
2006-03-07 19:19
虫的传人
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-5
收藏
得分:0 
在C和C++中外部连接的全局变量都是只能定义一次声明多次.

在C/C++中一个外部连接的全局变量可以定义一次. 格式为:

//1.CPP
int a;

定义可以理解为 "为这个变量分配内存". 多次定义同一个外部连接的全局变量会导致连接时出错, 因为一个变量只能分配内存一次.

如果在另一个源文件中要用这个变量, 这个变量需被声明. 格式为:
//2.CPP
extern int a;
声明的意思是告诉编译器 "这个变量是定义在另一个源文件里的". 声明不涉及内存的分配, 所以一个变量可以有多次声明.

对于使用外部连接的全局变量, 一个常用的惯例是, 在 .C或.CPP 中定义, 在.H 中声明. 例如, 一个模块由model.h 和 model.cpp 组成. 如果 model 需要定义一个全局变量 int a;而且希望别的模块使用和修改它,那a 的定义和声明应该是:
//In model.h
extern int a; //声明
...

//In model.cpp
int a; //定义

内部连接的全局变量是只在当前源文件内部可见的全局变量. 它可以通过定义时加static 实现.例如:

//model.cpp
static int a;

这里a 就是只能在model.cpp里可见的. 另一个源文件不能访问和使用a, 实际上, 它根本不知道a 的存在. 所以多个源文件中可以定义相同名字的内部连接的全局变量.

好马不吃回头草 然而,我不是好马 可见,坏马也不吃回头草
2006-03-07 22:03
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 

多谢了

自强不息:)
2006-03-08 10:19
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 

总结一下:
1、外部连接:全局变量,普通全局函数,类
2、内部连接:常量,内联函数,static 修饰的变量和函数
我笔记上有,但我在机房。。。凭记忆写的,可能不准确……


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-03-08 10:35
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 

把你的笔记发上来了
让我加深一下这个概念


自强不息:)
2006-03-08 11:47
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 
好的,这是我自己总结的,不当之处请指教。

1、文件作用域内的所有名字(有例外,见2)都有外部连接,如:全局变量,普通函数
2、static 对象或函数,常量,内联函数是内部连接
3、类声明、局部变量不连接(因为连接只用在连接/装载期间有地址的成员)
4、无名字的名字空间内部都是内部连接(见《C++编程思想I Page:224》)

for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-03-15 22:13
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 
4、无名字的名字空间内部都是内部连接(见《C++编程思想I Page:224》)
这个要看下书
多谢多谢

自强不息:)
2006-03-16 12:09
快速回复:什么是内部连接和外部连接
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027896 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved