无法直接调用原因:

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++ 标准来进行条件编译,以便在不同的编译环境中编写可移植的代码。