2014-04-28 51 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++包裝類。