extern "C" 是C++特有的組合關鍵字,在C裡並沒有這個的組合,僅有extern這個關鍵字!
為什麼C++會需要這樣的關鍵字組呢? 原因是C++它有一個複載(overloading)的功能,也就是說同樣的函式名稱可以有多個定義只要參數簽名不同即可。比如說C++裡可以有以下的二個宣告
bar(int i, int j);
bar(double i, double j);
這二個函式都是同樣的名字叫foo,僅參數型式不同。然而在C語言裡是不被允許的! C++是如何處理這同名的函式呢? 其實他在編譯時會偷偷的把這二個函式名變成不同的名字,舉例來說bar(int i, int j)可能會被改成_bar_int_int(每種compiler產生不太一樣),而另一個則被改成_bar_double_double。這技術稱 Mangling。
問題來了! 當我們希望C++不要偷換函式名時該怎麼辦? 於是就有了extern "C" 這個關鍵字組出現了。這個字組就是請C++不要自己又偷天換日,請它保留原名。所以當我們宣告一個函式如下時:
extern "C" bar(int i, int j);
編譯器就不會把bar變成_bar_double_double。
實際使用的注意事項:
1/ 當C++使用C的函式庫(library)時,C++不能直接套用C的header檔。因為他會把header裡的宣告給mangleing了。所以他必須使用如下:
extern "C"
{
#include "C_LIB.h" //C_LIB 是C語言所製告出來的。
}
2/ 相反的,在C語言的編譯器裡若要使用由C++所製告出來的C函式庫,那麼也不能直接的使用C++的header檔。因為此header檔必然存在 extern "C" 這個關鍵字組,而這字組C語言是不認識的。所以必需要把C++的header檔裡的extern "C" { } 移除後才可以讓C編譯器使用。
fe-tool
訂閱:
張貼留言 (Atom)
Buddhism and Software Developer
In today's fast-paced society, we are often surrounded by work, goals, and external pressures. However, the wisdom found in Buddhism off...
-
如果你平時在玩線上遊戲或是工作中經常需要大量點擊滑鼠,那麼一定有大量點擊滑鼠的經驗,非常浪費時間與精力!這個小程式可以讓您免於在做這些無意義的工作了! MouseClick可以依據使用者需求設定點擊的頻率(毫秒)。並且在2.0版可以讓使用者自由選擇滑鼠左鍵,右鍵,中鍵的點擊...
-
如果你忘記即時通的密碼,MessenPass是一個可以顯示儲存在你電腦的密碼的軟體。他可以破解的密碼相當多種,可見下列表。 MSN Messenger Windows Messenger (In Windows XP) Windo...
-
Abstract The DrivingDirection package (com.google.googlenav.DrivingDirection) is removed since Android SDK 1.1. However, in this art...
沒有留言:
張貼留言