기본 사항 이해
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++의 강력한 기능을 활용하면 프로젝트에 완전히 새로운 수준의 기능을 제공할 수 있습니다.