我可以在 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++ 库吗?的主要内容,如果未能解决你的问题,请参考以下文章