2014-04-28 52 views
0

我对将剪辑嵌入C和C++之间的差异感到困惑。 我有成功的嵌入卡入C程序服从于高级编程指南中的步骤(第4.17) 现在,我要将剪辑成C++程序,和我有一些问题。将剪辑嵌入到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. 当我将剪辑嵌入到C程序中时,我使用makefile从github下载(如上所示)。它使用“gcc”,想知道是否应该将“gcc”改为“g ++”并做一些其他更改。

  2. 源文件是.c文件和.h文件,我应该改变他们到.cpp文件和文件.HPP?

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

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

一些愚蠢的问题 谢谢你的任何答案或想法。

回答

0

记住,C++是大部分与C

向后兼容

如果夹报头包含extern "C"在C++中的函数原型,你可以使用它只是相同C.只是包含头文件并链接到从C源文件生成的库/对象文件。

0

1.2节高级编程指南中对C++兼容性一些说明:

1.2 C++兼容性

夹子源代码现在可以使用任一种ANSI C或 C++编译器进行编译。最低限度,非ANSI C编译器必须支持完整的ANSI 样式函数原型和无效数据类型才能编译 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++”选项作为makefile中的.c文件。你可以在你的C++源文件中使用g ++。以这种方式编译源文件时,可以直接从C或C++代码中调用APG中记录的函数,而无需使用extern“C”包装函数原型。

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