[英]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.