首先明確一點,extern "C" 這一句是C++的語法,C編譯器是無法理解的,所以在使用C進行編譯時,這一句是要被跳過的。
由於C++支援過載,在生成符號表時,使用與C不同的方法,以區別過載。比如
void fun( int i );
void fun( float f );
為了區別兩個fun,可能會生成 fun_int 與 fun_float 兩個函式。這時在C中是無法直接呼叫fun的,只能在C++中呼叫fun。
但如果用 extern "C" 宣告,比如
extern "C"
{
void fun(int i );
// void fun(float f );
}
這時則按C的語法生成fun的符號,這樣在C中可直接呼叫fun,當然c++也可以用。
簡單點結論,如果你的所有源程式,全都使用c語言,或者全部都使用c++,可以不用管extern "C"。否則,用c語言寫的部分不需要特別處理,用c++寫的部分也不需要特別處理,但用c++呼叫c寫的函式,這些c寫的函式的宣告部分需要加extern "C"限定。
首先明確一點,extern "C" 這一句是C++的語法,C編譯器是無法理解的,所以在使用C進行編譯時,這一句是要被跳過的。
由於C++支援過載,在生成符號表時,使用與C不同的方法,以區別過載。比如
void fun( int i );
void fun( float f );
為了區別兩個fun,可能會生成 fun_int 與 fun_float 兩個函式。這時在C中是無法直接呼叫fun的,只能在C++中呼叫fun。
但如果用 extern "C" 宣告,比如
extern "C"
{
void fun(int i );
// void fun(float f );
}
這時則按C的語法生成fun的符號,這樣在C中可直接呼叫fun,當然c++也可以用。
簡單點結論,如果你的所有源程式,全都使用c語言,或者全部都使用c++,可以不用管extern "C"。否則,用c語言寫的部分不需要特別處理,用c++寫的部分也不需要特別處理,但用c++呼叫c寫的函式,這些c寫的函式的宣告部分需要加extern "C"限定。