c 知識點 extern C 的作用

2021-08-23 13:10:56 字數 711 閱讀 9058

因為c、c++的編譯器對函式名的修飾不同,為了保證在c、c++中編寫的函式能夠被互相呼叫,所以採用這個鏈結指示符

以int func(int, int)為例,c的編譯器會將名字改編為_func, 而c++的編譯器會改編為_func_int_int 或_funcii(各編譯器不同)。

如果這個函式在c中編譯成庫,目標檔案中函式名為_func,當這個函式中c++中被呼叫時,c++的編譯器就會到目標檔案中

尋找_funcii,結果找不到,出錯。

所以為了防止這種問題,在c++呼叫時,將函式宣告前加個extern "c" 告訴c++的編譯器,不要

對名字再進修飾,而直接去找_func。

同樣在c++中編譯的函式,如果想讓c來使用,通常也加上extern "c"在編譯時將函式名按c的風格進行修飾。

通常c中編寫的函式如果有在其它語言中使用的可能,通常會有下面形式的宣告:

#ifdef __cplusplus

extern "c"

3.可以包含標頭檔案,相當於標頭檔案中的宣告都加了extern "c"

extern "c"

4. 不可以將extern "c" 新增在函式內部

5. 如果函式有多個宣告,可以都加extern "c", 也可以只出現在第一次宣告中,後面的宣告會接受第乙個鏈結指示符的規則。

6. 除extern "c", 還有extern "fortran" 等。

javascript知識點 作用域

理解作用域,重要的是理解 js 解釋 的規範,js 在解釋 的時候會執行這2個步驟 預解釋js 會對 var function 引數做乙個預解釋,儲存起來 逐行解釋 完成預解釋後,會逐行解釋 例子1console.log a var a 1執行上面的 輸出的是 undefined跟著上面的步驟走就是...

作用域相關知識點

作用域相關知識點 1.全域性作用域 乙個 html 頁面就是乙個全域性作用域 開啟頁面的時候,作用域就生成了,直到關閉頁面為止 2.區域性作用域 私有作用域 性質 只有函式生成私有作用域 每乙個函式就是乙個私有作用域 1 全域性作用域最大,所有的私有作用域都是在全域性作用域下的 2 函式寫在哪個作用...

C 裡面extern 「c」 的作用

c 裡面extern c 的作用 extern c 表示編譯生成的內部符號名使用c約定 例如 int fun int i,int j c fun c fun int int 當我們想從c 中呼叫c的庫時,不能僅僅說明乙個外部函式,因為呼叫c函式的編譯 和呼叫c 函式的編譯 是不同的。如果你僅說明乙個...