首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

extern "C"的了解

2013-04-12 
extern C的理解extern C的引入是为了解决C函数重载的问题,C之父在设计C语言的时候,考虑到对C的兼容,引

extern "C"的理解

extern "C"的引入是为了解决C++函数重载的问题,C++之父在设计C++语言的时候,考虑到对C的兼容,引入了extern "C",使得在C++中能够无误地使用C的库函数(大部分的库函数都是由C编写的)


在编译期间,C和C++为函数生成修饰名的方式是不一样的,这一点可以认为是C++实现函数重载的机制,考虑这样一段C代码:

原因是:fun是采用C的编译方式,编译器为其生成的函数修饰名是_fun,而在test.cpp文件中的fun函数采用的是C++编译方式,生成的修饰名是?fun@@YAHH@Z,在链接阶段,由于前后fun生成的修饰名不一致,导致重定向失败,所以就出错了!

而为了在C++中使用C编译方式,才引入了extern "C"技术(其实不光是这样,想想在项目中使用的库函数,大部分都是用C语言编译方式的),现在对上面的test.cpp代码进行改动:

EXTRN_fun:NEAR_DATASEGMENT$SG529DB'%d', 0aH, 00H_DATAENDS_TEXTSEGMENT_mainPROC NEAR; 10   : {pushebpmovebp, esppushecx; 11   :   printf("%d\n", fun(2));push2call_fun                     ; 现在fun函数的修饰名变成C方式了!addesp, 4pusheaxpushOFFSET FLAT:$SG529call_printfaddesp, 8



热点排行