[英]Access inline C++ function from C
我正在尝试为 C++ 创建 C 函数包装器,我的目标是使它们内联。 inte.net 上的所有解决方案都说,在库中制作内联 function 时,只需将 function 定义放入 header 文件中即可。 但这在这种情况下不起作用,因为函数包含的代码只能在 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
内联? (包装器是一个 static 库)。
内联意味着内联源代码的编译器需要在某种程度上理解它。 C 编译器不理解 C++ new
. 你不能这样做。 让它保持非内联,这样就可以链接代码的编译版本,而无需编译器本身理解 C++。
如果代码(库和最终可执行文件)是在启用 LTO 的情况下编译的,则 linker 可能会在此时内联代码,但并不能保证。
显然,通常你不能在 C 代码中内联 C++ 代码,它们是两种不同的语言。
所以,要么
在编译库中强制显式实例化 C++ function,
确保 C++ function 与 C 代码兼容,并将其作为内联保留在 header 文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.