它与OBJ文件,它们是如何用来做什么,和内存如何在全球范围的地址变量是通过连接过程最终发现。目标文件包含在相应cpp中定义的所有全局数据和函数的地址。他们以相对的方式布置一些内存,告诉liker在这个文件中可以找到这些全局变量/ funcs的位置。因此,例如,
function doFoo can be found 0 bytes from beginning of this file
int foo::bands can be found 12 bytes from beginning of this file
etc
如果你之前做过直C,它几乎容易考虑。在纯粹的C语言世界中,你会用更传统的模块化编程理念来做事。你的模块将被定义为头和cpp。标题将使用extern关键字定义如下所示的“公共”变量,然后在cpp中实例化它。
foo.h中
extern int bands;
Foo.cpp中
#include "foo.h"
int bands;
foo.obj:
int bands can be found 0 bytes from the beginning of this file
的 “外部” 关键字状态,这个名字是有效的,其地址会在链接时解决。每个包含“foo.h”并想使用“band”全局变量的人都可以使用它。在链接时,链接器会找出foo.obj中存在的频段。如果你忘记在foo.obj中加入“int bands”,你会得到一个链接器错误,并且必须去解决它。
在C++中使用静态类声明我相似。你告诉用户存在这个叫做“foo :: bands”的东西,它的存在将在链接时解决。后来下了线,链接器发现,在foo.obj,FOO ::带存在,所有引用到foo ::带就可以解决。
这不是在这种情况下需要。你是否想让乐队变得静止? – jalf 2009-04-30 13:23:47