无法直接调用原因:
C 和 C++ 的函数可以相互调用,但需要一些特殊的注意事项,因为它们有不同的编译和链接规则以及一些语法差异。
链接规则:
- C 语言的链接器通常使用 C 标准的函数命名和调用约定,而 C++ 链接器使用 C++ 的函数命名和调用约定。这意味着 C++ 可以支持函数重载和运算符重载,而 C 不能。
- 如果你要在 C++ 中调用 C 函数,需要使用
extern "C"
块将 C 函数声明包裹起来,以告诉 C++ 编译器使用 C 的链接规则。
在C++中使用C语言函数
//在C的.h文件中使用extern "C"包裹一下这个函数
extern "C" {
void c_function(); // 这是一个C函数的声明
}
另一种写法:
extern “C” void c_function();
//在.cpp的文件中调用上面.h文件后可以直接使用
int main() {
c_function(); // 在C++中调用C函数
return 0;
}
还有一种简单直接的就是将调用的库文件直接包含:
extern "C" {
#include "test1.h"
#include "test2.h"
}
//在C中调用C++函数
//在C++的.h文件中
#ifdef __cplusplus
extern "C"{
#endif
void Jx_ChengyuJump(void);
#ifdef __cplusplus
}
#endif
//在C的.c文件中
int main()
{
Jx_ChengyuJump();
return 0;
}
中间使用的:__cplusplus
__cplusplus
是一个预定义的宏,在 C++ 编译器中使用,用于指示当前编译环境是否为 C++。这个宏的主要目的是允许代码根据编译器是否支持 C++ 标准来进行条件编译,以便在不同的编译环境中编写可移植的代码。