C与C++混合编程

    xiaoxiao2021-03-25  60

    CC++混合编程的项目中,难免要相互调用对方的函数,如果不做特殊处理,就很容易出现编译出错的问题。

    C中调用C++的函数,在C++文件中已实现的函数,通过#include包含的.h文件可以找到,但提示函数未定义(undefined)。这是什么原因呢?

    如我们定义了一个函数。如:

    int func(int t)

    {

    //function

    return 0;

    }

    C编译器会将此函数编译成类似_func的符号,C连接器只要找到了调用函数的符号,就认为链接成功。而C++编译器为了实现函数的重载,会再编译时带上函数的信息,将上面的函数编译成类似_func_int这样的符号。所以在C函数中调用C++中调用的函数时,编译器提示函数未定义。

    我们只需要在C++文件和.h文件中,加入extern “c” {},告诉编译器此C++文件依照C的方式来编译封装接口,函数实现还是依照C++语法和C++方式来编译。如:

    l func.c文件

    #ifdef __cplusplus

    extern “C” {

    #endif

     

    int func(int t)

    {

    //function

    return 0;

    }

     

    #ifdef __cplusplus

    }

    #endif

    l func.h文件

    #ifdef __cplusplus

    extern “C” {

    #endif

     

    #ifndef __FUNC_H__

    #define __FUNC_H__

    int func(int t);

    #endif

     

    #ifdef __cplusplus

    }

    #endif

    其中__cplusplusC++编译器的保留宏定义。extern “C” {}是高手C++编译器{}里面的函数按照C的编译格式来编译和链接。

    这样,就可以在C函数中调用C++函数,也可以在C++函数中调用C的函数。

    转载请注明原文地址: https://ju.6miu.com/read-36070.html

    最新回复(0)