从C++访问内联C++函数

lstz6jyr  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(138)

我正在尝试为C创建C函数 Package 器,我的目标是使它们内联。互联网上所有的解决方案都说,当在库中创建内联函数时,只需将函数定义放在头文件中。但在这种情况下,这将不起作用,因为函数包含只能在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内联?( Package 器是一个静态库)。

4ktjp1zp

4ktjp1zp1#

内联意味着源代码的编译器需要在某种程度上理解它。C编译器不理解C++ new。你不能这样做。让它不内联,这样代码的编译版本就可以被链接,而编译器不需要在本地理解C++。
如果代码(库和最终的可执行文件)是在启用LTO的情况下编译的,那么链接器可能会在此时内联代码,但这并不能保证。

tct7dpnv

tct7dpnv2#

显然,一般情况下,你不能在C代码中内联C++代码,它们是两种不同的语言。
所以要么

  • 强制编译库中的C++函数的显式示例化,
  • 确保C++函数与C代码兼容,并将其保留在头文件中作为内联。

相关问题