緣由用途
主要用於c++與其他語言的混合編程,C語言不支持函數重載,編譯之後的函數名依然是原函數名。在c++中,支持了函數重載,重載之後的函數名 爲 原函數名+參數名。比如函數 bool max(int a, int b),編譯之後,c中爲 max, 而c++中函數名變成了 max_int_int。
c++
使用
c++頭文件中調用c語言代碼
c語言不支持 extern "C", 要讓其他語言按c格式編譯,必須在c++頭文件中調用c語言,使用extern "c"申明。
extern “C” 告訴 編譯器, 按C語言的格式編譯和鏈接
// a.h
#ifndef A_H
#define A_H
extern "C" int max(int a, int b);
#endif
以上代碼, A模塊調用其他模塊的max函數, 如果不使用extern "C"申明, 會按C++語法編譯, 編譯後調用函數名爲max_int_int,而實際需要調用名爲max,此時連接器會找不到要調用的函數模塊而報錯。