关于《大规模C++程序设计》的一些感想(连载)

 我对动手写一些大的程序很有抵触心理,可能是初学的原因,但是已经是大二了,应该不算初学。
我们学校不是名校,而且地理环境比较偏僻。信息量自然就闭塞,我只能通过协议感想与外界交流。希望大家多多帮助。

我没有好好思考过一个大型的程序应该具备什么样的素质。只是下手写的时候觉得无所适从。我觉得不光是自己的编程能力有限,和自己的不勤于与人交流有关系。我总是闭门造车。不停遇到困难,有时候会去调试,有时候干脆就放在那,问题就一直没有解决。


首先对这本书上的最开始的设计原则的几个连接解释,引用一段文章

对象、引用、函数、类型、模板和命名空间被统称为识别名称。每个识别名称都有三种连接类型:外部连接,内部连接和无连接。这些连接类型都规定了它在其他范围以及转译单元中的可见性。

识别名称的外部连接和程序的每个编译单元都有联系。比如:函数通常不被定义为静态的全局对象,常量对象可以定义为枚举类型等等。

下面列举了一些识别名称的外部连接方式:

 int n; //global non-static, hence external linkage
class C
{
 void f(); // member functions
 static int n;// static data members
};
extern const K; //defined in a different translation unit
void func ();
namespace NS
{
 class D{}; // qualified name NS::D has external linkage
}
enum DIR
{
 Up,
 Down
} // DIR, Up and Down have external linkage

识别名称的内部连接仅存在于编译单元的定义中。在一个命名空间中定义一个静态对象,那么这个命名空间的连接类型就是内部连接。匿名连接的成员、匿名命名空间的成员、typedef类型名,或者常量变量是不能定义成外部的。

下面举例说明识别名称的内部连接方式:

  static void f(); //a static function
static int q; //a static object declared in global scope
namespace //members of anonymous namespace
{
 class C{};
 int x;
 }
const M=1000; //const object not declared extern
union{ //members of an anonymous union
 int x;
 float y;
};
typedefint I; // typedef names

无连接方式仅存在于识别名称被定义的范围。这些识别名称包括局部对象、局部类和局部类型。此外,不管识别名称是内部连接还是外部连接,它们都是无连接。

下面举例说明无连接方式:

  int main()
{
 class C{}; // C is a local class; has no linkage
 int j; // local object not declared extern has no linkage
 C c;  // the object c has no linkage
 {
 //types declared in this scope aren't visible elsewhere
  enum Parity  // local enum and enumerators
  {
   Even,
   Odd
  };
  typedefint I; // local typedef
  I i; //OK
  Parity x=Odd; //OK
 }
 Parity x; //error, Parity isn't recognized in this scope
 I n; //ditto
}

现在,我们可以利用不同的连接方式确定识别名称在不同范围和编译单元中的可见性了。

书中说到内部连接和外部连接
当一个.cpp文件编译时,C预处理器(cpp)首先(递归地)包含头文件,形成一个含有所有必要信息的单个源文件。然手这个中间文件(成为“编译单元”)被编译生成一个与主文件名相同的.obj文件(目标文件)。连接把在不同编译单元中产生的符号联系起来,构成一个可执行程序。这就包含两种不同的连接:外部连接和内部连接。

内部连接的定义:如果一个名称对于它的编译单元来说是局部的,并却在连接是不可能与其它编译单元中的同样的名称相冲突,那么这个名称由内部连接。
内部连接意味着对这个定义的访问被局限于当前编译单元中。对其他单元都不可见。
反之,可以定义外部连接,就是这个名称在连接时可以和其他编译单元交互。
现在明白为什么有连接错误的时候会提示 使用了非法的外部连接。

be continued……

 

posted on 2007-03-31 19:02 lele 阅读(2520) 评论(2)  编辑 收藏 引用

评论

# re: 关于《大规模C++程序设计》的一些感想(连载) 2008-06-16 22:51 游客

抄书有意思吗?  回复  更多评论   

# re: 关于《大规模C++程序设计》的一些感想(连载)[未登录] 2008-06-20 19:38 foxtail

@游客
做摘记还是很好的  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(1)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜