我对将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文件。
当我将Clips嵌入到C程序中时,我使用github中的makefile下载(如上所示)。如果我将“gcc”更改为“g ++”并进行其他更改,它会使用“gcc”。
源文件是.c文件和.h文件,我应该将它们更改为.cpp文件和.hpp文件吗?
在sourceforge上还有clipmm描述为A C ++ CLIPS接口,我下载并阅读它的doc,我不太明白。它只提供一些.hpp文件或一个全新的剪辑吗?
我使用了高级编程指南中提供的C函数,我不知道在将剪辑嵌入C ++时是否可以使用这些函数?
一些愚蠢的问题 感谢您的任何回答或想法。
答案 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 ++包装类。