簡體   English   中英

外部“C”與const

[英]extern “C” with const

我們的系統中有一段C代碼,其中包含一些具有全局訪問權限的數組:

source.h

extern const int magic[5];

由source.c:

const int magic[] = { 1, 2, 3, 4, 5};

有人認為將此更改為C ++是一個好主意,因此上述內容最終出現在extern "C"塊中:

source.h:

extern "C" { 
    const int magic[5]; 
}

source.cc:

extern "C" {
    const int magic[] = { 1, 2, 3, 4, 5};
}

編譯時沒有使用gcc -Wall發出吱吱聲

直到有人試圖使用該陣列我們發現了問題。 extern "C"使用const會導致根本不生成外部符號。 這發生在gcc,sun workshop和ibm的編譯器上。

考慮到gcc沒有警告你,你做的事情很奇怪,我有點不知道這是否是預期的行為。

這個標准所規定的行為也是如此,還是一個相當普遍的錯誤?

const變量具有內部鏈接(如果聲明為static ),除非您使用extern指定外部鏈接。 如果要在一個源文件中定義它並從其他源文件訪問它,則需要外部鏈接。

除了使用extern "C"指定語言鏈接之外。

extern "C" { 
    extern const int magic[5]; 
}

您的C聲明正確指定了外部鏈接; 但是當你改為C ++時你刪除了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM