在閱讀代碼時,可能會見到下面的代碼:
那上面代碼中的 #ifdef __cplusplus 和 extern "C" 到底有什麼作用呢?
- __cplusplus:其實就是C++,是 cpp 中的自定義宏,定義了這個宏的話表示這是一段 cpp 的代碼。
- extern "C":用來在C++程序中聲明或定義一個C的符號。
要理解為何使用 extern "C",首先要了解 C++ 對函數的重載處理。在C++中,為了支持重載機制,在編譯生成的彙編碼中,會對函數的名字進行一些處理,比如加入函數的返回類型等等;而在C中,只是簡單的函數名字,不會加入其他的信息。也就是說 C++ 和 C 對函數名字的處理是不一樣的。
C++ 之父在設計 C++ 之時,考慮到當時已經存在了大量的 C 代碼,為了支持原來的 C 代碼和已經寫好 C 庫,需要在 C++ 中儘可能的支持 C,extern "C" 就是其中的一個策略。
因此,為了在 C++ 代碼中調用用 C 寫成的庫文件,需要用 extern "C" 來告訴編譯器這是一個用 C 寫成的庫文件,請用 C 的方式來鏈接它們。
閱讀更多 算法集市 的文章