LINUX.ORG.RU

С++ и библиотеки на чистом С


0

0

Вопрос очень простой. Могу ли я в своих программах на С++ (иногда с использованием QT) юхать сишные библиотеки? Спрашиваю потому, что здесь 95% бинарников написаны на С. И как на это дело будет смотреть j++? Собираю программы так:

qmake -project

qmake project_file.pro

make

anonymous

Совершенно без проблем!

Сишные хидеры нужно окружить такой бякой:

#ifdef __cplusplus
extern "C" {
#endif

. . . 


#ifdef __cplusplus
}
#endif

и добавить ручками в макефайл, есснно.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

> и добавить ручками в макефайл, есснно.

А в программном модуле, где этот header будет объявлен, можно просто #define объявить вместо GNU/Make? Вот так например,

#include "header.h"

#define __cplusplus

rjaan ★★
()
Ответ на: комментарий от anonymous

> Макрос __cplusplus определят компилятор - об этом думать не нужно.

Да, согласен в мануалке по GNU GCC рекомендуют, еще ставить условие для __cplusplus на проверку больше или равно 199711L.

#ifdef __cplusplus >= 199711L extern "C" { #endif

. . .

#ifdef __cplusplus >= 199711L } #endif

Как пишут в той же мануалке -- это связано с тем что компилятор присваивает __cplusplus значение равное "1". Тем самым получается, что этому макросу надо присваивать значение равным 199711L для полного соответсвия 1998 C++ standard, если таковой надо соблюдать. Я правильно понял?

rjaan ★★
()
Ответ на: комментарий от friday

> а можно ли наоборот, юзать библиотеки, написанные на С++ в программах на чистом С?

нужно написать wrapper (на C++), который провайдит чисто Сишный интерфейс. Экспортируемые функции и структуры должны быть обернуты в extern "C"

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.