我正在尝试将一些用 C 编写的函数包含到 C++ 项目中。我已经按照这些说明走了很远。不幸的是,并非我需要调用的所有 C 函数都在 ac 头文件中声明。有些只是在“.c 文件”中定义的静态函数。
有没有办法在我的 C++ 项目的一个类中仍然调用这样的“未声明的 C 函数”而不改变 C 源代码(不是我自己维护的)?
我已经考虑过在我的 C++ 标头中自己声明 C 函数,如下所示:
extern "C"
{
#include "c_header_1.h"
static void c_function(int* out, const unsigned char len, const some_c_struct* st);
#include "c_header_2.h
}
gcc 只报错:
warning: void c_function(int*, const unsigned char, const some_c_struct*); declared static but never defined [-Wunused-function].
作为第三个参数传递给 struct 的指针c_function(int*, const unsigned char, const some_c_struct*)
似乎让事情变得更加棘手,因为该类型some_c_struct
是在属于“.c-file”的标头c_function(...)
中声明的。这意味着我需要在前向声明之前包含标题,c_function(...)
但显然这会使链接器监督定义。
C++ 代码的一个非常简单的版本大致如下所示: 头文件“CppClass.h”:
#ifndef CPP_CLASS_H
#define CPP_CLASS_H
extern "C"
{
#include "c_header_1.h"
#include "c_header_2.h"
...
}
class CppClass
{
public:
//...
void some_member();
//...
};
#endif
实施“CppClass.cpp”
//...
void CppClass::some_member()
{
//...
::c_func_x(32, &data); // call to function in c_header_1
//...
::c_func_y(&data2); // call to function in c_header_2
::c_function(data3, len, st);
}