将Clips嵌入到C和将Clips插入到C++之间是不同的

different between embedding Clips into C and embedding Clips into C++

本文关键字:Clips 之间 C++ 是不同 插入 和将      更新时间:2023-10-16

我混淆了将Clip嵌入到C和C++中的区别。我已经按照高级编程指南(第4.17章)中的步骤成功地将剪辑嵌入到C程序中现在,我想把剪辑嵌入到一个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,被描述为C++CLIPS接口,我下载并阅读了它的文档,我不太理解它。它只是提供了一些.hpp文件还是一个全新的剪辑?

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

一些愚蠢的问题谢谢你的回答或想法。

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

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

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

1.2 C++兼容性

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

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

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