Southmountain Ответов: 2

Как повторно использовать мой код C в моем приложении C++ (visual C++)?


У меня есть много математических функций, реализованных на языке Си. это расширение имени файла .c. теперь я хочу построить приложение MFC на visual C++.

Итак, как мне повторно использовать этот устаревший код C в моем коде C++? Я придумал несколько идей, например, изменить имя файла на .cpp, а затем добавить их в свои проекты MFC.

но я стараюсь найти совет у вас, экспертов и гуру...
Спасибо миллиону!

Что я уже пробовал:

попробовал какой-то простой случай, и моя идея работает...

2 Ответов

Рейтинг:
8

Rick York

Создайте заголовочный файл с прототипами для всех ваших функций. Оберните их в extern заявление, как это :

extern "C" {

// prototypes go here

}

{ редактировать }

Если вы ожидаете, что ваш файл будет использоваться как в C, так и в C++, то это обычный способ справиться с этим :
#ifdef __cplusplus
extern "C" {
#endif


// prototypes for things that need to be labelled "from C" go here


#ifdef __cplusplus
}
#endif


Southmountain

спасибо, что поделились этим! когда я реализую этот прототип функции, нужно ли мне снова поместить этот оператор extern?

extern "C"{
//implementationint function_name(int,int)
{  
//code logic here
}
}

Rick York

Когда вы реализуете эти функции, они будут находиться в файле .c, не так ли? Если это так, то вам не нужно еще одно внешнее утверждение. Если вы поместите их в файл .cpp или используете компилятор c++ для этого файла, то вам снова понадобится оператор extern.

Southmountain

да, я предпочитаю, чтобы мои файлы .c оставались нетронутыми. мое понимание обеспечивается вашим подтверждением!
огромное вам спасибо!

Rick York

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


Southmountain

Большое спасибо!!!

CPallini

5.

Рейтинг:
1

OriginalGriff

Это один из способов ... а поскольку C++ - это C с надстройками, он должен работать нормально (и гарантировать, что код построен для того же самого since: x86 vs 64 bit, например.

Другой способ-построить его как библиотеку и связать с вашим приложением, чтобы вам не нужно было вносить в него никаких реальных изменений.

Я сам предпочитаю библиотеки, так как сложнее испортить код по ошибке ... :смеяться:


Southmountain

спасибо, ОГ! поскольку у меня есть исходный код, я думаю добавить их непосредственно в проект...

OriginalGriff

Серьезно, я бы построил файл библиотеки и включил его в проект: это делает управление версиями намного проще!

Southmountain

вы поместили lib в свой репозиторий кода?

OriginalGriff

Может, попробуешь спросить по-английски? :смеяться:

CPallini

5.