C에서 C++ 호출

Ceseo C Hochul



프로그래밍에서는 일반적으로 오래된 코드를 업데이트하거나 다양한 언어의 모듈을 결합할 때 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++ 기능을 인식하지 못합니다. C++ 컴파일러는 extern 'C'를 사용하여 C 규칙을 준수하는 함수 이름을 생성하므로 원활한 상호 운용성이 가능합니다. 이 선언은 표준화된 인터페이스를 제공하여 C 코드가 이름 충돌이나 호환성 문제 없이 C++ 함수에 액세스하고 활용할 수 있도록 합니다. 다음은 C에서 C++를 호출하는 예입니다. 이 조합이 어떻게 작동하는지 이해하기 위해 인스턴스를 좀 더 자세히 살펴보겠습니다.





실제 예: C에서 C++를 호출하여 원의 면적 계산

이 간단한 예제에서는 C에서 C++ 함수를 호출하여 원의 면적을 계산하는 방법을 안내합니다. 이 코드는 헤더 파일(circle.h)과 구현 파일(circle.cpp)로 구성됩니다. 코드의 첫 번째 부분에는 헤더 파일의 extern C 선언이 포함됩니다. 다음 코드를 참조하세요. 그런 다음 각 코드 줄을 개별적으로 자세히 살펴보겠습니다.

#ifndef CIRCLE_AREA
#define CIRCLE_AREA

통근자 '씨' {

더블 계산_CA지역 ( 더블 라드 ) ;

}

#endif

더블 Circle_Carea ( 더블 라드 ) {

반품 3.14159 * 라드 * 라드 ;

}

각 부분을 분석해 보겠습니다.



#ifndef CIRCLE_AREA 및 #define CIRCLE_AREA

이 줄은 헤더 파일의 내용이 컴파일 프로세스에 한 번만 포함되도록 보장하는 포함 가드의 일부입니다. CIRCLE_AREA가 정의되지 않은 경우 후속 코드가 포함되고 CIRCLE_AREA가 정의됩니다.

통근자 '씨'

이 구문은 다음 함수에 C 링크가 있음을 선언하는 데 사용됩니다. 이는 C와 C++ 모두에서 호출되는 코드를 작성할 때 필수적입니다.

더블 계산_CA지역 ( 더블 라드 ) ;

이 줄은 double 인수(rad)를 취하고 double을 반환하는 “calculate_Carea”라는 함수를 선언합니다.

헤더 파일의 extern 'C' 선언은 컴파일러에게 함수에 대해 C 스타일 링크를 사용하여 C 코드에서 호출할 수 있도록 알립니다. 이 코드를 사용하여 'circle.h' 파일에 저장하여 원의 면적을 찾습니다. 이 헤더 파일을 저장한 후 C++ 프로그램에 헤더 파일로 포함시키고 원하는 기능을 수행하기만 하면 됩니다. 다음은 원의 면적을 계산하는 C 코드입니다. “main.c” 파일에는 C++ 헤더가 포함되어 있으며 “Circle_Carea”를 직접 호출합니다. 다음 코드를 참조하세요.

#include 'circle.h'

정수 기본 ( ) {

더블 라즈 = 5.0 ;

더블 영역 = Circle_Carea ( 라즈 ) ;

printf ( '원의 면적은 다음과 같습니다. %.2f \N ' , 영역 ) ;

반품 0 ;

}

이 간단한 C 프로그램은 'circle.h'라는 이전 파일에 정의된 함수를 사용하여 원의 면적을 계산하고 인쇄합니다. 코드를 분석해 보겠습니다.

#include 'circle.h'

이 줄에는 프로그램의 'circle.h' 헤더 파일 내용이 포함됩니다. 헤더 파일에는 원 계산과 관련된 함수 선언이나 매크로가 포함될 수 있습니다.

정수 기본 ( ) {

프로그램의 실행은 C 프로그램의 진입점인 main 함수에서 시작됩니다.

더블 라즈 = 5.0 ;

double 유형의 변수 rads가 선언되고 값 5.0이 할당됩니다. 이 변수는 원의 반경을 나타낼 가능성이 높습니다.

더블 영역 = Circle_Carea ( 라즈 ) ;

반경 rads를 인수로 사용하여 'Circle_Carea'라는 함수를 호출하고 결과를 변수 영역에 저장합니다.

printf ( '원의 면적은: %.2f \N ' , 영역 ) ;

결과는 'printf'를 사용하여 콘솔에 인쇄됩니다. '원의 면적: %.2f\n' 문자열은 면적 값에 대한 '%f' 자리 표시자가 있는 형식 문자열입니다. '%.2f'의 '.2'는 소수점 이하 두 자리만 표시되도록 지정합니다.

반품 0 ;

주 함수는 운영 체제에 성공적인 프로그램 실행을 나타내는 0을 반환하여 종료됩니다.

정리하자면, 헤더 파일은 C 링크로 함수를 선언하고, 구현 파일은 원의 면적을 계산하는 로직을 정의합니다. 이러한 분리를 통해 코드를 C 및 C++ 프로그램 모두에서 사용할 수 있습니다. 다음 이미지에 제공된 코드의 출력을 참조하세요.

출력에서 볼 수 있듯이 계산된 원의 면적은 78.54로 면적 = 3.14*5*5 = 78.54로 계산됩니다. 면적을 계산하는 함수는 'circle.h' 헤더 파일에 정의되어 있으며 extern 'C'의 도움으로 C++ 파일에서 호출됩니다.

결론

이 가이드에서는 C++를 C 프로그램에 통합하는 과정을 안내했습니다. C++ 기능을 C 코드베이스에 통합하려면 포인터, 이름 변경 및 이중 목적 헤더 파일을 신중하게 고려해야 합니다. 제공된 예는 이러한 통합을 달성하기 위한 실제적인 접근 방식을 보여줍니다. 이제 이 두 프로그래밍 언어를 연결하는 방법을 살펴보았으므로 더 많은 도구가 있습니다. C로 작업하면서 C++의 강력한 기능을 활용하면 프로젝트에 완전히 새로운 수준의 기능을 제공할 수 있습니다.