Как лучше всего интегрировать компоненты C в среду C ++? - PullRequest
0 голосов
/ 29 марта 2011

Какова наилучшая практика для помещения компонента C в среду C ++?

Наша лаборатория создает среду C ++ для нашего исследования.Он использует некоторые существующие программы в качестве компонентов.Моя работа заключается в интеграции программного обеспечения в C. Структура программного обеспечения довольно проста:

  • Набор extern переменных в Ah
  • Набор определений и функций структур данныхпрототипы в Bh
  • Остальной исходный код - это файлы .c, реализующие функции, определенные в Bh

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Стоит задуматься о том, можно ли с пользой улучшить стиль использования клиента с помощью дополнительных функций C ++.Вы можете часто тривиально оборачивать функции C для большего опыта в стиле C ++.Например:

  • объекты могут:
    • аккуратно инкапсулировать данные, возвращаемые некоторыми вызовами функций, которые затем используются в качестве входных данных для последующих вызовов, что делает их хранение и использование более неявным
    • предоставляют некоторые гарантии относительно правильной последовательности построения (инициализации), использования и уничтожения (очистки)
  • пространства имен могут помочь сгруппировать и устранить неоднозначность идентификаторов
  • перегрузка оператора может позволить записывать операции над типами, более похожими на математические или логические выражения (например, x = a + b вместо x = add(a, b)) * Исключения 1016 *
  • могут уменьшить количество мест в клиентском коде, где значения ошибокдолжны быть явно проверены и обработаны (полезно, если этот код, связанный с ошибками, в настоящее время запутывает логику программы)
  • если какая-либо из функций реализует универсальную функциональность через void * s, тогда шаблоны могут быть предоставлены как фронтконец, автоматизируя преобразование в void* тип
* 1 и обратно023 * Это просто не по зубам ... гораздо проще дать конкретные ответы, если показать репрезентативную выборку функций.

И, конечно, как вы говорите, выИмея исходный код на C, вы можете попробовать скомпилировать его с помощью компилятора C ++, что даст вам возможность избежать «внешнего C» и небольшого загрязнения глобального пространства имен, а также добавить большую часть вышеперечисленного, а не в качестве обертокно в качестве настройки существующего кода: может сэкономить ваше время и упростить сопровождение.

2 голосов
/ 29 марта 2011

Обтекание всех заголовочных файлов C и исходных файлов с помощью:

#ifdef __cplusplus
extern "C" {
#endif

//... rest of the file

#ifdef __cplusplus
}
#endif

Это компиляция и правильная ссылка в компиляторе c ++. Это только начальный шаг. В зависимости от реализации и того, как функции используются в коде C, компилятор c ++ может пожаловаться на несколько вещей. Но попробуйте это как первый шаг.

См. здесь для хорошего представления о том, как получить доступ к функциям C из C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...