我可以在 C 程序中使用 C++ 库吗?

Posted

技术标签:

【中文标题】我可以在 C 程序中使用 C++ 库吗?【英文标题】:Can I use C++ libraries in a C program? 【发布时间】:2009-11-01 19:25:52 【问题描述】:

我正在用 C 语言编写程序,但我想使用动态库,例如向量。是否可以在 C 程序中使用 C++ 库?

【问题讨论】:

【参考方案1】:

不是std::vector,不是。任何模板化的东西都是正确的。

一般来说,使用 C++ 代码并不好玩,但可以做到。您必须将类包装在您的 C 代码可以调用的普通非类函数中,因为 C 不做类。为了使这些函数可以在 C 中使用,您可以使用 extern "C" 声明将它们包装起来,告诉 C++ 编译器不要进行名称修改。

然后您可以使用 C++ 编译器编译包装函数并创建一个库,您的 C 程序可以链接到该库。这是一个非常简单的例子:

// cout.cpp - Compile this with a C++ compiler
#include <iostream>

extern "C" 
    void print_cout(const char *str) 
        std::cout << str << std::endl;
    


/* print.c - Compile this with a C compiler */
void print_cout(const char *);

int main(void) 
    print_cout("hello world!");
    return 0;

【讨论】:

然后你需要将 c++ 库链接到我假设的应用程序。例如,通过使用 g++ 而不是 gcc 进行最终链接。我认为那是 ovious。 约翰的回答很好。但是将 C++ 和 C 代码链接在一起可能很困难。我建议在这里使用动态库(.so 或 .dll)【参考方案2】:

此外,How to mix C and C++ 有关于该主题的精彩提示。

【讨论】:

【参考方案3】:

可以,只要您使用 C++ 编译器进行编译即可。请注意,这不再使它成为 C 程序,而是 C++ 程序。

【讨论】:

【参考方案4】:

如果您的编译器编译 C++,您可以。我会说在大多数编译器情况下你可以,特别是如果你使用 gcc。

大多数 IDE 允许您创建一个新的 C++ 应用程序,然后您可以用纯 C 编写代码并在需要时使用 C++ 对象。

您可以这样做,因为 C++ 是 C 的超集。这意味着 C++ 包含 C 的所有特性,并在 C 之上添加了更多功能。

【讨论】:

【参考方案5】:

std::vector 是一个模板类。它依赖于 C++ 为 exist 提供的特殊语法。

您可以使用一组将opaque pointer 传递给vector 的函数来包装它的功能,代价是您自己处理vector 类的分配。

我建议不要这样做,因为你会引入不必要的复杂性和可疑的好处。当您需要使用 C++ 结构时,只需编写 C++,并将其抽象为声明 extern "C" 的函数。

【讨论】:

以上是关于我可以在 C 程序中使用 C++ 库吗?的主要内容,如果未能解决你的问题,请参考以下文章

你真的了解 C 和 C++ 标准库吗?

我可以在不使用其 UI 框架的情况下将 Qt 用作 C++ 库吗

我可以在 C++ 中使用 cython 编译的动态库吗?

Qt c++应用程序在android tv上自动启动

我们可以静态链接动态 C 库吗?

任何人都知道将图像划分为任意形状的 C++ 或 Python 库吗?