【问题标题】:different between embedding Clips into C and embedding Clips into C++将 Clips 嵌入 C 和将 Clips 嵌入 C++ 之间的区别
【发布时间】:2014-04-28 09:53:42
【问题描述】:

我对将 Clips 嵌入 C 和 C++ 之间的区别感到困惑。 我已经成功地将剪辑嵌入到 C 程序中,遵循高级编程指南(第 4.17 章)中的步骤 现在,我想将 Clips 嵌入到 C++ 程序中,我有一些问题。

.c.o :
    gcc -c -Wall  -Wundef -Wpointer-arith -Wshadow -Wcast-qual \
        -Wcast-align -Winline -Wmissing-declarations -Wredundant-decls \
        -Wmissing-prototypes -Wnested-externs \
        -Wstrict-prototypes -Waggregate-return -Wno-implicit $<

clips : $(OBJS)
    gcc -o clips $(OBJS) -lm -ltermcap

OBJS 代表 .o 文件。

  1. 当我将 Clips 嵌入 C 程序时,我使用从 github 下载的 makefile(如上所示)。它使用“gcc”想知道我是否应该将“gcc”更改为“g++”并进行其他更改。

  2. 源文件是.c文件和.h文件,我应该把它们改成.cpp文件和.hpp文件吗?

  3. sourceforge 上也有clipsmm,描述为 A C++ CLIPS Interface,我下载并阅读了它的文档,我不太明白。它只是提供一些 .hpp 文件还是一个全新的剪辑?

  4. 我已经使用了高级编程指南中提供的C函数,不知道在将Clips嵌入C++时是否可以使用这些函数?

一些愚蠢的问题 感谢您的任何回答或想法。

【问题讨论】:

    标签: c++ c clips


    【解决方案1】:

    请记住,C++ 在很大程度上与 C 向后兼容。

    如果剪辑头包含 extern "C" 用于 C++ 中的函数原型,您可以像使用 C 一样使用它。只需包含头文件,并与从 C 源文件生成的库/目标文件链接。

    【讨论】:

      【解决方案2】:

      高级编程指南中的第 1.2 节有一些关于 C++ 兼容性的说明:

      1.2 C++ 兼容性

      现在可以使用 ANSI C 或 C++ 编译器。最低限度,非 ANSI C 编译器必须支持完整的 ANSI 样式函数原型和 void 数据类型以便编译 剪辑。如果你想从 C++ 程序中调用 CLIPS API,它是 通过编译 CLIPS 源代码通常更容易进行集成 文件作为 C++ 文件。这消除了制作外部“C”的需要 在 C++ 程序中声明 CLIPS API。一些编程 环境允许您指定文件是否应该 根据文件扩展名编译为 C 或 C++ 代码。其他 环境允许您明确指定要使用的编译器 无论扩展名如何(例如,在 gcc 中,选项“-x c++”将 将 .c 文件编译为 C++ 文件)。在某些环境中,相同 编译器用于编译 C 和 C++ 程序和编译器 使用文件扩展名来确定文件是否应该是 编译为 C 或 C++ 程序。在这种情况下,更改 .c 将 CLIPS 源文件扩展为 .cpp 通常允许源 编译为 C++ 程序。

      我建议不要更改文件扩展名,而是将“-x c++”选项与 gcc 一起用于 makefile 中的 .c 文件。您可以将 g++ 与您的 c++ 源文件一起使用。当您以这种方式编译源文件时,您可以直接从您的 C 或 C++ 代码调用 APG 中记录的函数,而无需使用 extern "C" 包装函数原型。

      我没有使用 clipsmm,但它似乎是核心 CLIPS 源代码的一组 C++ 包装类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多