无法直接调用原因:
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++ 标准来进行条件编译,以便在不同的编译环境中编写可移植的代码。