我正在尝试将一些用C编写的函数包含到C++项目中。我遵循these的说明进行了很多工作。 不幸的是,我不需要调用的所有C函数都在c头文件中声明。有些只是在“.c-files”中定义的静态函数。如何将C函数导入尚未在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].
的指针结构作为第三个参数来传递c_function(int*, const unsigned char, const some_c_struct*)
似乎使事情更棘手,因为这种类型的some_c_struct
是属于c_function(...)
被宣布为好“的.c文件”标题中声明。这意味着我需要在c_function(...)
的前向声明之前包含标题,但显然这会使链接器监督定义。
A中的C++代码的非常simplyfied版本看起来大致是这样的: 头文件 “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);
}
'static'功能都在内部他们所定义的模块,你不能从外部接触他们。 – melpomene
@melpomene没错。如果它不应该从C调用(这可能是为什么它是'静态'),为什么它应该从C++调用?并且:你永远不会在C头文件中放置一个'static'。这是无稽之谈。 – tofro
除非你计划'#include'.c文件到你的翻译单元(yuck),而不* *在这个范例之外编译它们,那些'static'函数并不存在。关于cpp文件。但是,从你的具体情况来看,这是一个可怕的选择。 – WhozCraig