NDK12 C與C 函式符號相容

2021-10-05 20:19:40 字數 1127 閱讀 9414

ndk開發彙總

c的大部分**可以在c++中直接使用,但是仍然有需要注意的地方。

如果需要在c++中呼叫c實現的庫中的方法

extern 「c」 //指示編譯器這部分**使用c的方式進行編譯而不是c++

``

void

func

(int x,

int y)

;

有相同內容的檔案

/ main.cpp

intfunc

(int x,

int y)

intmain()

進行編譯

gcc main.c -o mainc.o

gcc main.cpp -o maincpp.o

nm -a mainc.o

nm -a maincpp.o

結果

那麼這樣導致的問題就在於: c的.h標頭檔案中定義了func函式,則.c原始檔中實現這個函式符號都是func,然後拿到c++中使用,.**件中的對應函式符號就被編譯成另一種,和庫中的符號不匹配,這樣就無法正確呼叫到庫中的實現。

因此,對於c庫可以:

#ifdef __cplusplus

extern "c"

#endif

//__cplusplus 是由c++編譯器定義的巨集,用於表示當前處於c++環境

或者在c++ 引用c檔案的地方

extern

"c"

extern 關鍵字 可用於變數或者函式之前,表示真實定義在其他檔案,編譯器遇到此關鍵字就會去其他模組查詢

C語言高階 12 注釋符號

注釋重要嗎?請觀察下面 判斷下面的注釋是否正確?int main 注釋規則 編譯器在編譯過程中,使用空格替換整個注釋 字串字面量中的 和 不代表注釋符號 型注釋不能被巢狀。有趣的問題 下面這行 是什麼意思?y x p作者本意 把x除以 p的結果賦值給y。編譯器 將 作為一段注釋的開始,把 後的內容都...

NDK13 C 基礎 虛函式

ndk開發彙總 增加程式的擴充套件性 class parent class child public parent parent c new child 編譯期間 確定c 為 parent 呼叫parent的test方法 c test 修改parent為virtual 虛函式 動態鏈結,告訴編譯器不...

C 之引用與符號「 」

一 的意思 1.取位址符,這時候它用於資料的前面,比如int a b 2.c 裡還使用 作為引用符,如果你確認程式是標準的c而非c 的話,那麼可以排除是引用了。引用也用於資料前面,它只在定義和宣告時使用,如int othername name int a b 定義時使用在等號左側,是引用。相當於a是...