重载函数编译后的新名字
2016-03-25 16:31
225 查看
我们都知道很多语言都支持函数重载,那么编译器是怎么处理编译后它们的命名冲突的呢?
1、先给出几个正确的重载函数:
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这里权当是一个作用域标识):
作用域+函数名+参数列表参数类型的首字母
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这里权当是一个作用域标识):
作用域+函数名+参数列表参数类型的首字母
相关文章推荐
- Qt的4个图像类QImage/QPixmap/QBitmap/QPicture
- 《MySQL学习笔记》:查询
- JVM的内存划分
- ubuntu 14 x86_64 nginx rtmp ffmpeg 在线直播和点播
- UIViewController - SenDylan
- PHP 函数
- [Cordova] 手机网页里的1px
- 博客搬家
- Java字符串全角转半角
- leetcode-10 Regular Expression Matching
- Struts.xml 常用常量配置
- 史上最全面最精华的Linux内存相关资料
- 垃圾车定律
- spring 动态定时器配置
- 两个input之间有空隙,处理方法
- 3月25日。
- 【学习笔记】图像RGB三个分量的理解与显示
- Android Cache 解析
- leetcode-9 Palindrome Number
- 省市下拉联动插件