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

时间:2009-11-01 19:25:53

标签: c++ c vector

我正在用C编写程序,但我想使用像vector这样的动态库。是否可以在C程序中使用C ++库?

5 个答案:

答案 0 :(得分:11)

不是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;
}

答案 1 :(得分:2)

此外,How to mix C and C++提供了有关此主题的重要提示。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

您可以使用围绕opaque pointervector的函数集合来包装其功能,但代价是自己处理vector类的分配。< / p>

我建议反对它,因为你会引入不必要的复杂性和可疑的好处。只需在需要使用C ++构造时编写C ++,并在函数声明extern "C"后面进行抽象。