91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

處理C++時的注意事宜有哪些

發布時間:2021-10-27 18:02:35 來源:億速云 閱讀:141 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關處理C++時的注意事宜有哪些,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

這樣的代碼到底是什么意思呢?首先,__cplusplus是cpp中的自定義宏,那么定義了這個宏的話表示這是一段cpp的代碼,也就是說,上面的代碼的含義是:如果這是一段cpp的代碼,那么加入extern "C"{和}處理其中的代碼。

#ifdef __cplusplus   extern "C" {   #endif   //一段代碼   #ifdef __cplusplus   }   #endif

要明白為何使用extern "C++",還得從cpp中對函數的重載處理開始說起。在C++中,為了支持重載機制,在編譯生成的匯編碼中,要對函數的名字進行一些處理,加入比如函數的返回類型等等.而在C++中,只是簡單的函數名字而已,不會加入其他的信息.也就是說:C++和C對產生的函數名字的處理是不一樣的.

比如下面的一段簡單的函數,我們看看加入和不加入extern "C++"產生的匯編代碼都有哪些變化:

int f(void)   {   return 1;   }

在加入extern "C"的時候產生的匯編代碼是:

 .file "test.cxx"   .text   .align 2   .globl _f   .def _f; .scl 2; .type 32; .endef   _f:   pushl %ebp   movl %esp, %ebp   movl $1, %eax   popl %ebp   ret

兩段匯編代碼同樣都是使用gcc -S命令產生的,所有的地方都是一樣的,唯獨是產生的函數名,一個是_f,一個是__Z1fv。明白了加入與不加入extern "C"之后對函數名稱產生的影響,我們繼續我們的討論:為什么需要使用extern "C"呢?

C++之父在設計C++之時,考慮到當時已經存在了大量的C++代碼,為了支持原來的C++代碼和已經寫好C++庫,需要在C++中盡可能的支持C++,而extern "C++"就是其中的一個策略。試想這樣的情況:一個庫文件已經用C++寫好了而且運行得很良好。

這個時候我們需要使用這個庫文件,但是我們需要使用C++來寫這個新的代碼。如果這個代碼使用的是C++的方式鏈接這個C庫文件的話,那么就會出現鏈接錯誤.我們來看一段代碼。

明白了加入與不加入extern "C++"之后對函數名稱產生的影響,我們繼續我們的討論:為什么需要使用extern "C++"呢?C++之父在設計C++之時,考慮到當時已經存在了大量的C代碼,為了支持原來的C++代碼和已經寫好C++庫,需要在C++中盡可能的支持C++,而extern "C++"就是其中的一個策略。

試想這樣的情況:一個庫文件已經用C++寫好了而且運行得很良好,這個時候我們需要使用這個庫文件,但是我們需要使用C++來寫這個新的代碼。如果這個代碼使用的是C++的方式鏈接這個C++庫文件的話,那么就會出現鏈接錯誤.我們來看一段代碼:首先,我們使用C的處理方式來寫一個函數。

上述就是小編為大家分享的處理C++時的注意事宜有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

安福县| 耿马| 贞丰县| 双辽市| 渝中区| 旌德县| 宿松县| 吉林省| 曲麻莱县| 都安| 渝中区| 芜湖市| 和田县| 乐平市| 和政县| 来安县| 汶川县| 永德县| 皋兰县| 南投市| 当雄县| 施秉县| 河池市| 泸水县| 且末县| 昆明市| 威远县| 曲阜市| 四会市| 新昌县| 左云县| 德格县| 宁波市| 阿瓦提县| 澄迈县| 洪湖市| 仙居县| 新宾| 磐石市| 清远市| 嘉善县|