符号修饰与函数签名

p_87

Linux下的GCC编译器中,默认情况下已经去掉了在C语言符号前加"_"的方式,但是Windows平台下的编译器还保持着在符号前加"_"的习惯。

函数签名使得函数在目标文件中的符号变成与其源文件的函数名、函数参数、所在的类和名称空间及其它信息关联了起来。
函数签名经名称修饰变成修饰后名称目标文件中的符号名,变量亦如此。
c++filt工具可以用来解析被修饰过的名称,比如:
c++filt _ZN1N1C4funcEi
输出:N::C::func(int)

C++为了与C兼容,在符号管理上,C++有一个用来声明或定义一个C符号的"extern "C""关键字用法:
例如:
extern "C" {
    int function(int);
    int var;
}
extern "C" int func(int);

C++编译器会将在extern "C" 的大括号内部的代码当作C语言代码处理,此时C++的名称修饰机制将不会起作用。

为了C 与 C++兼容性,可以使用条件宏判断当前编译单元是不是C++代码:
#ifdef __cplusplus
extern "C" {
#endif

void *memset (void *, int size_t);

#ifdef __cplusplus
}
#endif

原文链接: https://www.cnblogs.com/openix/archive/2012/12/26/2834530.html

欢迎关注

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

    符号修饰与函数签名

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

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

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

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

(0)
上一篇 2023年2月9日 下午4:01
下一篇 2023年2月9日 下午4:01

相关推荐