它與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