将Clips嵌入到C和将Clips插入到C++之间是不同的
different between embedding Clips into C and embedding Clips into C++
我混淆了将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文件。
当我将Clips嵌入到C程序中时,我使用从github下载的makefile(如上所示)。它使用了"gcc",想知道我是否应该将"gcc"更改为"g++"并进行其他更改。
源文件是.c文件和.h文件,我应该把它们改成.cpp文件和.hpp文件吗?
sourceforge上也有clipsmm,被描述为C++CLIPS接口,我下载并阅读了它的文档,我不太理解它。它只是提供了一些.hpp文件还是一个全新的剪辑?
我已经使用了《高级编程指南》中提供的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++包装类。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 如何在CLIPS中优化不同模板事实之间的模式匹配
- 将Clips嵌入到C和将Clips插入到C++之间是不同的