2013-10-25 53 views
1

在C++底漆(第四版)。有一個部分如下const的變量是本地的一個文件,默認

不像其他的變量,除非另有規定,在全局範圍內聲明爲const變量是 地方到定義對象的文件。該變量僅存在於該文件中,並且不能由其他文件訪問 。 我們可以通過指定它的extern使整個程序中的const對象訪問:

// file_1.cc 

// defines and initializes a const that is accessible to other files 

extern const int bufSize = fcn(); 

// file_2.cc 
extern const int bufSize; // uses bufSize from file_1 

// uses bufSize defined in file_1 

for (int index = 0; index != bufSize; ++index) 

     // ... 

我嘗試這樣

// file_1.cc 
    // defines and initializes a const that is accessible to other files 
    const int bufSize = fcn(); 
    // file_2.cc 
    extern const int bufSize; // uses bufSize from file_1 
    // uses bufSize defined in file_1 
    for (int index = 0; index != bufSize; ++index) 
     // ... 

這也是沒有問題的。所以我的問題是:

常量變量本地文件或這只是一個錯誤?

非常感謝。

+0

「我已經嘗試這樣的[...]這也是沒有問題的。」哪個編譯器?我確實得到了你似乎期待的鏈接錯誤。 – hvd

+0

本書的這一段總是對我提出疑問,也許他們在解釋聯繫指令時應該保存它以備後用。 –

回答

3

在C中,常量值默認爲外部鏈接,所以它們只能出現在源文件中。在C++中,常量值默認爲內部鏈接,這允許它們出現在頭文件中。

當你聲明一個變量在C源代碼文件常量,你也這樣做:

const int i = 2; 

然後,您可以在另一個模塊中使用這個變量,如下所示:

extern const int i; 

但要在C++中獲得相同的行爲,您必須聲明const變量爲:

extern const int i = 2; 

如果您希望d eclare在C++源代碼文件中的外部變量用於在C源代碼文件的使用,使用:

extern "C" const int x=10; 

防止名稱按C++編譯器重整。

編號:http://msdn.microsoft.com/en-us/library/357syhfh%28v=vs.71%29.aspx

+0

是的,你是對的。非常感謝。我犯了一個錯誤,我在C源代碼文件中聲明瞭變量。所以我可以使用它,即使變量聲明爲const int i = 2。並且我再次嘗試它就像你說的一樣。最後,非常感謝你! – user2918902

0

extern只是一個聲明,無論變量是否爲const或不是。

const暗示內部聯動雖然。您可以將其視爲

static int x; 

在您無法修改的全局範圍內。如果「本地文件」指的是內部鏈接,那麼是的,這是正確的。