C++基础问题:什么叫做名字粉碎(name mangling)?

fjy19820702 2005-04-07 01:28:11
C++基础问题:什么叫做名字粉碎(name mangling)?
...全文
869 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
eslbs 2005-04-08
  • 打赏
  • 举报
回复
就是当年c++编译器先转成c然后再编译遗留下来的问题
wshcdr 2005-04-08
  • 打赏
  • 举报
回复
建议楼主要去看一下extern的用法
xjp6688 2005-04-08
  • 打赏
  • 举报
回复
楼上的厉害!
蒋晟 2005-04-08
  • 打赏
  • 举报
回复
A C++ compiler specific feature to pack the argument and return types (and more class and compiler specific info) for each C++ function into its name. Functions are externally resolved by names, and each member functions (inheritance!) and each normal function (overloading!) must be fully qualified. Typically mangled are: types, nested classes, local classes, template classes.

Unfortunately the binary layout of C++ classes are not standardized, left to the implementor, so virtually all C++ objects are not binary compatible, though gcc tries to clean up the mess a bit keeping a compatibility mode with MicroSoft Visual C++.
tudou614 2005-04-07
  • 打赏
  • 举报
回复
基本是这个意思:
int func(int a); =======> _func_int_

int func(int a,int b); =======> _func_int_int_

具体的东西比较多,还有4种调用约定,编译器解析出来变成诸如:xx@@YA...@....之类的东西

还是用上面的伪码理解吧
jun_01 2005-04-07
  • 打赏
  • 举报
回复
mangling ,在金山词霸中的第一个意思是"乱砍"! 霍霍.
xuzheng318 2005-04-07
  • 打赏
  • 举报
回复
帮楼主顶!关注!
快乐鹦鹉 2005-04-07
  • 打赏
  • 举报
回复
说明:
n 重载函数应该在参数个数或参数类型上有所区别,否则编译器将无法确定调用哪一个重载版本,即使是返回类型不同,也无法区分。例如:
int mul(int x,int y);
double mul(int x,int y);

虽然这两个函数的返回值类型不同,但是函数的参数个数和类型完全相同,编译器将无法区分这两个函数。

编译器通过函数名和其参数类型识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(name decoration)。类型安全的连接使得程序能够调用合适的重载函数并保证了参数传递的一致性。编译器能够检测到并报告连接错误。
晨星 2005-04-07
  • 打赏
  • 举报
回复
呵呵,别翻译,翻译了谁也不懂。
就是编译时在函数名字后面加上一些字母。最重要的功能就是区分重载函数。
你用VC调试程序时经常看到错误报告中给出的函数名比我们自己的函数名多一些字符,那就是mangling之后的结果。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧