当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

c与c++程序连接问题

    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

相关内容
赞助商链接