繁体   English   中英

将Clips嵌入C和将Clips嵌入C ++之间的区别

[英]different between embedding Clips into C and embedding Clips into C++

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

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

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

请记住,C ++在大多数情况下都与C向后兼容。

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

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

1.2 C ++兼容性

现在可以使用ANSI C或C ++编译器来编译CLIPS源代码。 至少,非ANSI C编译器必须支持完整的ANSI样式函数原型和void数据类型才能编译CLIPS。 如果要从C ++程序进行CLIPS API调用,通常通过将CLIPS源文件编译为C ++文件来进行集成更容易。 这消除了在C ++程序中为CLIPS API做出外部“ C”声明的需要。 某些编程环境允许您根据文件扩展名指定是将文件编译为C还是C ++代码。 其他环境允许您明确指定使用哪个编译器而不管扩展名如何(例如,在gcc中,选项“ -x c ++”会将.c文件编译为C ++文件)。 在某些环境中,使用同一编译器来编译C和C ++程序,并且该编译器使用文件扩展名来确定是将文件编译为C还是C ++程序。 在这种情况下,将CLIPS源文件的.c扩展名更改为.cpp通常可以将源代码编译为C ++程序。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM