C与C++混合编程

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的函数。

你可能感兴趣的:(ARM&Linux)