c和c 程式连接问题 他们之间的连接问题主要是因为c c 编绎器对函数名译码的方式不同所引起的……

考虑下面两个函数 /* c*/ int strlen(char* string) { ... } //c int strlen(char* string) { ... } 两个函数完全相同。在c在函数是通过函数名来识别的,而在C 中,由于存在函数的重载问题,函数的识别方式通函数名,函数的返回类型,函数参数列表三者组合来完成的。因此上面两个相同的函数,经过C,C 编绎后会产生完全不同的名字。所以,假如把一个用c编绎器编绎的目标代码和一个用C 编绎器编绎的目标代码进行连接,就会出现连接失败的错误。 解决的方法是使用extern C,避免C 编绎器按照C 的方式去编绎C函数 在头文档中定义: extern "C" int strlen(char* string) 或 extern "C" { int strlen(char* string) } 当C编绎器碰到extern "C"的时候就用传统的C函数编译方法对该函数进行编译。由于C编绎器不认识extern "C"这个编绎指令,而程式员又希望C,C 程式能共用这个头文档,因此通常在头文档中使用_cplusplus宏进行区分: #if define _cplusplus extern "C"{ #endif int strlen(char* string) #ifdefine _cplusplus } #endif 虽然很基础,但是解释透彻!

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!