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

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

【问题讨论】:

    标签: c++ c vector


    【解决方案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" 的函数。

          【讨论】:

            猜你喜欢
            • 2013-02-01
            • 2010-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-18
            • 1970-01-01
            相关资源
            最近更新 更多