日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重载函数编译后的新名字

發布時間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重载函数编译后的新名字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們都知道很多語言都支持函數重載,那么編譯器是怎么處理編譯后它們的命名沖突的呢?

1、先給出幾個正確的重載函數:

#include <iostream> using namespace std;int Add(int a, int b) {return a + b; }double Add(double a, double b) {return a + b; }double Add(double a, int b) {return a + b; }double Add(int a, double b) {return a + b; }void Add(void) {; }int main() {int a = 10;int b = 20;double d1 = 1.0;double d2 = 2.0;Add(a, b);Add(d1, d2);return 0; }

2、查看編譯后重載函數新名字的方法

a. 在vs2010下面,直接把重載函數都屏蔽了,然后在主函數里調用這些函數,此時會報錯,這時我們在錯誤信息里會看到這些函數的新名字。這種方法比較簡單。

b. 在vs2013下面,,先在解決方案里右鍵你的項目(編譯器界面沒有解決方案的可以用以下方法調出:點擊視圖->解決方案資源管理器或直接Ctrl+Alt+L),接著依次點擊:屬性->配置屬性->鏈接器->調試,找到映射導出一欄,把默認的否改為:是 (/MAPINFO:EXPORTS)即,然后重新編譯程序。此時,找到你項目(工程)的位置(在你電腦硬盤上的物理位置),找到Debug文件夾里的后綴為.map的文件,用記事本或其他文檔瀏覽軟件打開,在里面可以用編輯->查找的方式,輸入你的重載函數名,一直查找,直到找到幾個連續的與原函數名字比較相似的新函數名即可,這些就是你的新的函數名。

c. 在Linux下把編譯后的文件反匯編來查看

①建立一個.cpp文件,把代碼拷貝進去

②編譯該文件

③執行命令objdump -d a.out >log.txt反匯編并將結果重定向到log.txt文件中。

④對生成log.txt文件進行分析。

可以看到在log.txt里重載函數的名字變成了對應的這幾個,我們很明顯的發現在Linux里重載函數在反匯編之后的新名字可以很清楚的看出來。
而且我們可以總結出重載函數在反匯編之后出現的新名字的規律(Z3這里權當是一個作用域標識):
作用域+函數名+參數列表參數類型的首字母

總結

以上是生活随笔為你收集整理的重载函数编译后的新名字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。