【发布时间】:2023-01-17 22:13:09
【问题描述】:
我正在尝试为 C++ 创建 C 函数包装器,我的目标是使它们内联。网上所有的解决方案都说在库中制作内联函数时,只需将函数定义放在头文件中即可。但这在这种情况下不起作用,因为函数包含只能在 C++ 中编译的代码。
这个例子演示了这种情况:
// box_c.cpp
#include "box.h"
extern "C" Square *new_Square(int width, int height){
return new Square(width, height);
}
// box_c.h
void *new_Square(int width, int height);
// main.c
#include "box_c.h"
int main(void){
void *s = new_Square(5, 5);
}
在这种情况下是否可以使 new_Square 内联? (包装器是一个静态库)。
【问题讨论】:
-
box_c.h应该保护自己免受标头保护的递归包含。它还应检查是否编译为 C 或 C++,如果编译为 C++,则应具有extern "C" {...}。您应该编译此代码以确保您的示例有效。 -
无论内联与否,您的示例都无法工作,因为同一个函数不能同时返回
Square *和void *。 -
@Eljay 这是一个粗略的例子,所以我错过了很多细节。我的意思是在包装器源代码中包含“extern“C””,并在标题中包含 gaurds。