nm查看C++生成的.o,.o中的函数有啥命名规则么
C++的函数名是mangle过的,每个、每一些版本的编译器都可能有自己的规则。用GCC规则mangle的名字,可以用c++filt程序给转回来。
■网友
那是C++用来实现重载而加的名称修饰(Name mangling),你可以想一下一堆同名函数只有参数不同,怎么生成目标文件?你用C语言写就没这么多事了,一般只有一个数字表示参数大小,当然也就不能重载同名函数。这个生成规则C++语言标准是不管的,各家编译器自成一体,没有统一的命名修饰规则。
■网友
--demangle nm工具的这个选项
■网友
《程序员的自我修养:链接、装载与库》
GCC的基本C++名称修饰方法如下:所有的符号都以"_Z"开头,对于嵌套的名字(在名称空间或在类里面的),后面紧跟"N",然后是各个名称空间和类的名字,每个名字前是名字字符串长度,再以"E"结尾。比如N::C::func经过名称修饰以后就是_ZN1N1C4funcE。对于一个函数来说,它的参数列表紧跟在"E"后面,对于int类型来说,就是字母"i"。所以整个N::C::func(int)函数签名经过修饰为_ZN1N1C4funcEi。更为具体的修饰方法我们在这里不详细介绍,有兴趣的读者可以参考GCC的名称修饰标准。 【nm查看C++生成的.o,.o中的函数有啥命名规则么】 key:函数签名,符号修饰符
■网友
去看这篇博客,应该能解答你的问题。主要就是因为函数重载编译器需要区分相同函数名的函数,于是给这类函数使用某种命名规则来命名。C++的函数重载
推荐阅读
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- 雄激素|雄激素旺盛的男性,3个“优势”很难藏住,不妨自查看看
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 选科|三大主科成提分关键,选科策略要重视!2021新高考注意:中上游考生成炮灰
- 可以通过伪随机生成真实的地球吗
- 数独设计的原理是啥
- C、C++、java等编程语言都有哪些坑
- c++写http服务器不用cgi和apache该用啥
- 最新版的QQ音乐咋查看收听好友的歌单
- 看完c++ primer plus 还有必要再买本c++ primer看吗?
