“函数add编译生成的符号就是add?”

int add(int x,int y)
{
return x + y;
}
float add(float x,float y)
{
return x + y;
}

即便是在C语言中,add函数被多数C编译器编译后在符号库中的名字也不是add,而是_add。而在C++编译器中,int add(int
x,int y)会编译成类似_add_int_int这样的名字(称为“mangled name”),float add(float
x,float y)则被编译成_add_float _float,mangled
name包含了函数名、函数参数数量及类型信息,C++依靠这种机制来实现函数重载。

  所以,在C++中,本质上int add( int x, int y )与float add( float x, float y )是两个完全不同的函数,只是在用户看来其同名而已。

 
 这就要求初学者们能透过语法现象看问题本质。本质上,语言的创造者们就是在玩各种各样的花样,以使语言具备某种能力,譬如mangled
name花样的目的在于使C++支持重载。而C语言没有玩这样的花样,所以int add( int x, int y )与float add(
float x, float y )不能在C程序中同时存在。

原文链接: https://www.cnblogs.com/program_thinker/archive/2011/04/08/2009983.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    “函数add编译生成的符号就是add?”

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/23603

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午1:32
下一篇 2023年2月8日 上午1:32

相关推荐