Форум программистов, компьютерный форум, киберфорум
Наши страницы

Использование C++ кода внутри программы на C: какие есть варианты? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Язык С Кому не трудно! Тема: Оператор варианта http://www.cyberforum.ru/cpp/thread442498.html
Пожалуйста, кому не трудно. задание такое: По введенной дате вычислить день, который был 14 дней назад
C++ Как узнать, что поток закончился (библиотека pthread)? Друзья! Есть ли какая-нибудь pthread-функция, которая вызывается в основном потоке X и показывает- да, созданный ранее поток Y закончился? Так-то можно в принципе сделать так: передавать в функцию... http://www.cyberforum.ru/cpp/thread442331.html
Почему код, написанный на С++, в разы быстрее работает с большим объемом памяти, чем с маленьким? C++
Привет! Понадобилось мне сравнить скорость работы идентичных алгоритмов на Fortran и C++. Алгоритм - перемножение матриц. Решил поэкспериментировать с матрицами разных размеров. Вот результаты...
шаблонные методы шаблона. Специализация. C++
Вопрос: каким образом можно вынести реализацию методов класса за его пределы? Изначально вопрос формулировался так: Каким образом можно произвести специализацию одного из методов шаблона класса...
C++ С++ Unit Test (модульное тестирование) http://www.cyberforum.ru/cpp/thread441995.html
Вопроса по сути два. 1. что используете для модульного тестирования и почему отдаете этому предпочтение. 2. если используете eclipse, то очень интересует процесс конфигурирования eclipse для...
C++ Сетевой график ПОжалуйста помогите создать программу Задачи работы: - построение сетевого графика; - анализ сетевого графика; -оптимизация сетевого графика. p.s. сижу с сотки, интернет отключен программа... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18922 / 6882 / 504
Регистрация: 30.03.2009
Сообщений: 19,379
Записей в блоге: 30
09.02.2012, 21:21
Цитата Сообщение от retmas Посмотреть сообщение
придется писать С-обертки для вашего функционала
+1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int func (int x, int y)
{
  // типа твоя функция на Си++
  // в символьной таблице имя функции манглируется, а потому нет надёжных
  // переносимых способов вызвать непосредственно данную функцию из кода на Си
}
 
// А эта функция объявлена как extern "C" - оно предназначено для использования
// совместно с Си-кодами
extern "C" int c_func (int x, int y)
{
  return func (x, y);
}
А вот так к ней обращаться из функции на Си:

C
1
2
3
4
extern int c_func (int x, int y);
...
c_func (1, 2);
...
Понятно, что таким способом метод класса вызвать нельзя

Добавлено через 4 минуты
При этом надо понимать, что если, к примеру, твоя Си++'ная функция использовала конструкции, требующие run-time поддержки (например, new, std::cout, throw), то в режиме чистого Си с таким кодом ты слинковаться не сможешь - у тебя не будет хватать библиотеки поддержки Си++.Т.е. линковать придётся в режиме Си++ (грубо говоря, для линковки использовать g++, а не gcc)

В юниксах в этом случае действительно спасёт онанизм в виде помещения кода в динамическую библиотеку, которую линкуют при помощи компилятора Си++ (и таким образом, у неё пропишутся все необходимые зависимости по динамическим библиотекам). Как в этом случае дело обстоит под виндой - я не знаю
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru