2
我們已經在我們的系統中的一段C代碼包含這樣全球訪問幾個數組:爲extern「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};
}
這-Wall
沒有用gcc軋軋編譯直到有人試圖使用數組我們發現了這個問題。在extern "C"
內使用const
原因完全不會生成外部符號。這發生在gcc,sun workshop和ibm的編譯器中。
鑑於gcc並未警告您您正在做一些奇怪的事情,所以對於這是否爲預期行爲,我有些茫然。
所以這是標準規定的這種行爲,還是一個相當普遍的錯誤?
是的,這個行爲是在標準中指定的。一個在C++中使用的地方:http://stackoverflow.com/a/12043198/365496 – bames53 2014-10-27 17:07:43
公平地說,沒有任何東西在源文件中被「刪除」;只有在頭部,'extern'消失了。 – 2014-10-27 17:30:53
@LightnessRacesinOrbit:的確如此。但這足以打破聯繫。 – 2014-10-27 17:33:12