2015-01-14 56 views

回答

5

是否還需要extern "C"將Cpp文件中使用的全局變量鏈接到c文件中定義的全局變量?

可移植的,是的。

您可能會發現爲編譯器(例如,GCC,它不會在全局命名空間中篡改C++變量名稱)可以使用extern "C",但這不是所有編譯器都可以依賴的。

C編譯器是否也改變了變量名?

它取決於編譯器(特別是在它使用的ABI上)。語言標準沒有指定語言級別名稱如何映射到鏈接符號,因此不同的編譯器可以使用不同的名稱修改方案。

+2

雖然gcc並沒有在全局命名空間中修改C++變量名,但我遇到過Visual C++ *做的*。 –

+0

謝謝@Mike。這很有幫助 – kbharuka

+0

@BrunoDeFraine:我在gcc中發現鏈接錯誤。 – kbharuka

0

變量不是必需的。外部「C」是函數所需的,因爲在C++中,可以針對不同數量和類型的參數多次定義函數。每個函數名稱都包含編碼形式的參數。但是這些變量不能重新定義,並且在C和C++中名稱是相同的(兼容)。

+3

需要引用。我無法在語言鏈接的規範中找到任何說C和C++鏈接對變量相同的東西。 –

+0

非常簡單 - 使用.c和.cpp文件創建項目,在它們兩個中定義'int my_int',在.c中賦值並在.cpp中讀取它。唯一的區別是可以在.c中加上char'_',這可以在編譯器選項/ IDE中啓用/禁用。 – i486

+1

對於您的編譯器來說可能如此。在標準中,它是否指定了所有符合編譯器的情況? –