将Clips嵌入到C中并将Clips嵌入到C ++中之间有所不同

时间:2014-04-28 09:53:42

标签: c++ c clips

我对将Clips嵌入C和C ++之间的不同感到困惑。 我已成功将Clips嵌入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”更改为“g ++”并进行其他更改,它会使用“gcc”。

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

  3. 在sourceforge上还有clipmm描述为A C ++ CLIPS接口,我下载并阅读它的doc,我不太明白。它只提供一些.hpp文件或一个全新的剪辑吗?

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

“高级编程指南”的1.2节有一些关于C ++兼容性的注释:

  

1.2 C ++兼容性

     

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

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

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