cplusplus 和 extern C 的作用


#ifdef __cplusplus 和 extern C 的作用

在閱讀代碼時,可能會見到下面的代碼:

#ifdef __cplusplus 和 extern C 的作用

那上面代碼中的 #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 的方式來鏈接它們。


分享到:


相關文章: