C++调用C函数与Extern "C"

Author: YuMaNzI

Date: 2015/04/13

---------------------------------------------------------------

在实际中,我们可能会遇到开发一个CPP的项目,而某一个模块的功能已经有现有的C实现的库可以使用的情况。在CPP中通过Include头文件+lib或其它的方式调用相应的C函数,编译时会报LNK2001 unresolved external symbol错误,即找不到头文件对应的函数体。出现这种错误的根本原因在于CPP在处理重载时对函数名做了特殊的处理。


C语言是不支持重载的,即所有函数不能重名。另一方面,C++是支持重载的,函数重名则进一步用变量区分不同的重名函数。因此对同一个简单的函数声明:

int add(int a, int b);
CPP会产生_add_int_int之类的名字,即用函数名+变量的形式支持函数的重载;而C则直接生成_add作为函数的名字。在默认的链接方式下,CPP按照自己的方式生成函数名,即认为此函数的名字是带变量类型的。后续在lib文件中按照这个名字找函数体时,由于找不到,最终返回LNK2001的错误。


为了解决这个问题,CPP提供了一个C引用的指定符号,例如在某

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值