различаются между встраиванием клипов в C и встраиванием клипов в переполнение стека

Я запутался в разнице между встраиванием клипов в C и C ++.
Мне удалось встроить клипы в программу C, выполнив действия, описанные в Руководстве по расширенному программированию (глава 4.17).
Теперь я хочу встроить клипы в программу 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, я использую загрузку make-файла с github (как показано выше). Он использует «gcc», интересно, стоит ли мне менять «gcc» на «g ++» и делать какие-то другие изменения.

  2. исходный файл .c файл и .h файл, я должен изменить их на файл .cpp и файл .hpp?

  3. там также clipsmm на sourceforge, описанном как интерфейс C ++ CLIPS, я загружаю и читаю его документ, я не совсем понимаю его. Предоставляет ли он какой-нибудь файл .hpp или совершенно новые клипы?

  4. Я использую функции C, предлагаемые в Расширенном руководстве по программированию. Don’t Я не знаю, смогу ли я использовать эти функции при встраивании клипов в C ++?

Некоторые глупые вопросы
Спасибо за любой ответ или идею.

0

Решение

Помните, что C ++ по большей части обратно совместим с C.

Если заголовки клипов содержат extern "C" для их прототипов функций в C ++ вы можете использовать его так же, как и для C. Просто включите файлы заголовков и свяжите их с библиотечными / объектными файлами, сгенерированными из исходных файлов C.

0

Другие решения

Раздел 1.2 в Расширенном руководстве по программированию содержит некоторые замечания по совместимости с C ++:

1.2 С ++ СОВМЕСТИМОСТЬ

Исходный код CLIPS теперь может быть скомпилирован с использованием ANSI C или
Компилятор C ++. Как минимум, компиляторы не-ANSI C должны поддерживать полную ANSI
прототипы функций стиля и тип данных void для компиляции
CLIPS. Если вы хотите выполнять вызовы API CLIPS из программы на C ++, это
обычно проще сделать интеграцию путем компиляции исходного кода CLIPS
файлы как файлы C ++. Это устраняет необходимость делать внешнее объявление «C» в вашей программе на C ++ для API CLIPS. Немного программирования
среды позволяют вам указать, должен ли файл
скомпилирован как C или C ++ код, основанный на расширении файла. Другой
среды позволяют вам явно указать, какой компилятор использовать
независимо от расширения (например, в gcc опция «-x c ++» будет
компилировать файлы .c как файлы C ++). В некоторых средах то же самое
компилятор используется для компиляции как программ на C и C ++, так и компилятора
использует расширение файла, чтобы определить, должен ли файл
скомпилирован как программа на C или C ++. В этой ситуации меняется .c
расширение исходных файлов CLIPS до .cpp обычно позволяет исходный код
быть скомпилированным как программа C ++.

Вместо изменения расширений файлов я бы предложил использовать опцию «-x c ++» с gcc для файлов .c в вашем make-файле. Вы можете использовать g ++ с вашими исходными файлами на c ++. Когда вы таким образом компилируете исходные файлы, вы можете напрямую вызывать функции, задокументированные в APG, из своего кода C или C ++ без необходимости заключать прототипы функций в extern «C».

Я не использовал clipsmm, но, похоже, это набор классов-оболочек C ++ для основного исходного кода CLIPS.

0

По вопросам рекламы [email protected]