C和C++之间可以通过C++的extern "C"特性来实现互相调用。C++允许在函数前加上extern "C"以指明该函数使用C风格的命名规则,这样可以保证C++编译器不会改变该函数的名字、参数个数或类型等信息。然后在C中就可以直接调用该函数了。
具体步骤如下:
-
在C++中声明需要在C中调用的函数时,在函数前加上extern "C"关键字,这将使得函数在编译时使用C规范:
```cpp
ifdef __cplusplus
extern "C" {
endif
int add(int a, int b);
ifdef __cplusplus
}
endif
```
2. 在C文件中,包含C++头文件,并调用C++函数,与C++的类型匹配:```c
include "cplusplus_lib.h"
include
int main()
{
int a = 10, b = 30;
int sum = add(a, b);
printf("The sum of %d and %d is %d\n", a, b, sum);
return 0;
}
```
以上是一组示例代码,下面还有一组C++和C的交互调用示例:
C++代码:
// externCCpp.h 声明
#ifndef EXTERN_C_CPP_H_INCLUDED
#define EXTERN_C_CPP_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
void func_call_by_c(char *string);
int func_call_by_c_with_return(int num1, int num2);
#ifdef __cplusplus
}
#endif
void func_call_by_cpp(int a, int b);
#endif // EXTERN_C_CPP_H_INCLUDED
// externCCpp.cpp 实现
#include "externCCpp.h"
#include <iostream>
#ifdef __cplusplus
extern "C" {
#endif
void func_call_by_c(char *string)
{
std::cout << "Call from C:" << string << std::endl;
}
int func_call_by_c_with_return(int num1, int num2)
{
std::cout << "Call from C, with " << num1 << ", " << num2 << std::endl;
return num1 * num2;
}
#ifdef __cplusplus
}
#endif
void func_call_by_cpp(int a, int b)
{
std::cout << "Call from CPP:" << a << " + " << b << " = " << a + b << std::endl;
}
C代码:
#include "externCCpp.h"
int main()
{
func_call_by_c("Hello C!");
int result = func_call_by_c_with_return(10, 20);
printf("The result is %d\n", result);
func_call_by_cpp(100, 200);
return 0;
}
在以上代码中,extern "C"将C++与C代码编译时加以区分,提供了一种机制让C++函数以C的规范调用。最后,C++函数和C函数就可以互相调用了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C和C++如何实现互相调用详解 - Python技术站