標籤:

extern C裡面能有C++代碼嗎?

有個疑惑,我在函數外麵包了extern「C」,函數裡面包含有c++的類,那那些類是按什麼編譯的?

照理包起來的不應該都按C編譯嗎?可是我裡面有C++的類,但是沒有報錯。

如何在c++裡面寫給c庫回調的函數?

c庫的函數的參數入口是一個結構體,幾個成員和一個函數指針。我應該如何寫?

工作需要我要在c++里寫個函數給c庫回調,我對c++不是很熟,特此提問。

背景:php調用c庫,然後又要給c一個回調函數,由於c和php之間無法直接調用,所以我中間用一個第三方的php-cpp庫來作為二者的銜接,在c++調php函數的外面又包了一層,給c回調。


extern "C"

將讓 C++ 中的函數名具備 C-linkage 性質,目的是讓 C 代碼在調用這個函數時,能正確的鏈接到具體的地址。

函數的具體定義無關緊要,仍舊使用 C++ 編譯

------------- 額外的廢話

C++ 中函數有重載,使用函數名 + 參數信息作為鏈接時的唯一 ID。

C 中函數沒有重載,只使用函數名作為鏈接時的唯一 ID。

------------- 要看標準,要看更多細節

Language linkageen.cppreference.com

Standard C++isocpp.org


可以,但你不要在裡面拋異常不 catch 什麼的,因為 C 裡面沒法處理 C++ 異常。


能,但是裡面定義的函數不支持重載


推薦閱讀:

該如何設計實現一個telnet bbs?
C++ 中對 main 函數的地址賦值會怎樣?
關於2048局面的價值判斷及ai思路?
為什麼5%的CPU佔用會造成這麼大的性能損失?
為什麼工控還在用c?

TAG:C編程語言 | C | CC |