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

问题描述:

我正在用C编写一个程序,但我想使用动态库,如向量。是否有可能在C程序中使用C++库?我可以在C程序中使用C++库吗?

是的,只要你使用C++编译器编译它。请注意,这不再使它成为一个C程序,而是一个C++程序。

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

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

你可以做到这一点,因为C++是C的超集,这意味着C++包括所有的C'S功能,并增加了对C.

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

您可以用的,一个opaque pointer各地传递给vector功能的集合来包装它的功能,在处理vector类自己的分配成本。

我会建议反对它,因为你会介绍不必要的复杂性与可疑的利益。当你需要使用C++构造时,只需编写C++,并在声明extern "C"的函数后面抽象。

另外,How to mix C and C++有关于这个话题的很棒的提示。

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

一般来说,使用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; 
} 
+2

然后你需要将C++库链接到我假设的应用程序。例如通过使用g ++而不是gcc进行最终链接。我认为这很狡猾。 – elcuco 2009-11-01 19:36:13

+0

John答案很好。但是将C++和C代码连接起来可能很困难。 我建议在这里使用动态库(.so或.dll) – toto 2009-11-02 16:54:24