Вызов C++ из C

Vyzov C Iz C



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

Понимание основ

Когда дело доходит до вызова функций C++ из C и использования объектов C++, необходимо учитывать несколько ключевых моментов:

Ссылки на классы C++ в C

Распространенный подход к ссылке на классы C++ в C предполагает использование указателей на классы, которые могут передаваться между кодом C и C++.







Имя Мангл

Чтобы предотвратить изменение имени, которое может повлиять на распознавание в C, крайне важно поддерживать единообразие имен. Это гарантирует, что C сможет правильно идентифицировать и использовать функции и объекты.



Заголовочный файл двойного назначения

Заголовочный файл играет ключевую роль, служа двойной цели как для C, так и для C++. Он включает определения классов, распознаваемые C++, и инкапсулирует функции доступа для C.



Как вызвать C++ из C

Для вызова функций C++ из C крайне важно объявление extern «C». При применении к функциям C++ он гарантирует, что имена функций обрабатываются в стиле C (с использованием C-связывания) в процессе компиляции. C не распознает такие возможности C++, как перегрузка функций и искажение имен, которые могут возникнуть во время компиляции C++. Используя extern «C», компилятор C++ генерирует имена функций, соответствующие соглашениям C, обеспечивая беспрепятственную совместимость. Это объявление предоставляет стандартизированный интерфейс, позволяющий коду C получать доступ к функциям C++ и использовать их, не сталкиваясь с конфликтами имен или проблемами совместимости. Ниже приведены примеры вызова C++ из C. Чтобы понять, как работает эта комбинация, давайте более внимательно рассмотрим эти экземпляры.





Практические примеры: вычисление площади круга путем вызова C++ из C

В этом простом примере мы покажем вам, как вычислить площадь круга, вызвав функцию C++ на языке C. Этот код состоит из файла заголовка (circle.h) и файла реализации (circle.cpp). Первая часть кода включает объявление extern C в заголовочном файле. См. следующий код. Затем давайте подробно остановимся на каждой строке кода отдельно:

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

внешний 'С' {

двойной вычислить_CArea ( двойной рад ) ;

}

#endif

двойной Circle_CArea ( двойной рад ) {

возвращаться 3.14159 * рад * рад ;

}

Давайте разберем каждую часть:



#ifndef CIRCLE_AREA и #define CIRCLE_AREA

Эти строки являются частью защиты включения, которая гарантирует, что содержимое заголовочного файла будет включено в процесс компиляции только один раз. Если CIRCLE_AREA не определен, будет включен последующий код и будет определен CIRCLE_AREA.

внешний 'С'

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

двойной вычислить_CArea ( двойной рад ) ;

В этой строке объявляется функция с именем «calculate_Carea», которая принимает двойной аргумент (rad) и возвращает двойной.

Объявление extern «C» в заголовочном файле сообщает компилятору о необходимости использовать для функции связь в стиле C, что делает ее вызываемой из кода C. Используйте этот код, чтобы найти площадь круга, сохранив ее в файле «circle.h». После сохранения этого файла заголовка все, что вам нужно сделать, это включить его в качестве файла заголовка в программу C++ и выполнить нужную функцию. Ниже приведен код C, который вычисляет площадь круга. Файл «main.c» включает заголовок C++ и напрямую вызывает «Circle_Carea». См. следующий код:

#include 'circle.h'

интервал основной ( ) {

двойной рад '=' 5.0 ;

двойной область '=' Circle_CArea ( рад ) ;

печать ( 'Площадь круга: %.2f. \п ' , область ) ;

возвращаться 0 ;

}

Эта простая программа на языке C вычисляет и печатает площадь круга, используя функцию, определенную в предыдущем файле с именем «circle.h». Давайте разберем код:

#include 'circle.h'

Эта строка включает в себя содержимое заголовочного файла «circle.h» в программе. Заголовочный файл, скорее всего, содержит объявления функций или макросы, связанные с вычислениями окружностей.

интервал основной ( ) {

Выполнение программы начинается с основной функции — точки входа для программ на языке C.

двойной рад '=' 5.0 ;

Объявлена ​​переменная rads типа double, которой присвоено значение 5.0. Эта переменная, вероятно, представляет собой радиус круга.

двойной область '=' Circle_CArea ( рад ) ;

Функция с именем «Circle_Carea» вызывается с радиусом рад в качестве аргумента, а результат сохраняется в переменной области.

печать ( «Площадь круга: %.2f \п ' , область ) ;

Результат выводится на консоль с помощью «printf». Строка «Площадь круга: %.2f\n» представляет собой строку формата с заполнителем «%f» для значения площади. «.2» в «%.2f» указывает, что должны отображаться только два десятичных знака.

возвращаться 0 ;

Функция main завершается возвратом 0, что указывает на успешное выполнение программы в операционной системе.

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

Как вы можете видеть в выводе, рассчитанная площадь круга равна 78,54, что соответствует вычислению площади = 3,14*5*5 = 78,54. Функция расчета площади определена в заголовочном файле «circle.h», который затем вызывается в файле C++ с помощью extern «C».

Заключение

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