답변:
인터페이스로 노출되는 라이브러리 부분은 언어의 C "부분"만 사용하므로 클래스 또는 유사한 함수, POD 및 POD를 포함하는 구조체 만 내 보내지 않습니다. 또한 일반적으로 함수를로 표시하여 C ++ 이름 맹 글링을 비활성화해야합니다 extern "C"
. 일반적인 예는 다음과 같습니다.
extern "C" void foo(int bar);
이러한 방식으로 라이브러리를 노출하면 얻을 수있는 가장 큰 장점은 거의 모든 프로그래밍 언어가 C 라이브러리와 직접 인터페이스 할 수있는 메커니즘이 있지만 C ++ 라이브러리와 직접 인터페이스 할 수있는 사람은 거의 없다는 것입니다. 그런 의미에서 가장 낮은 공통 분모를 사용하여 다른 사람들이 라이브러리를 쉽게 사용할 수 있습니다.
그러나 다른 사람들이 사용할 수있는 라이브러리를 생성하는 경우 이는 실제로 유용한 전략 일뿐입니다. C ++ 전용 소프트웨어를 구축 중이고 라이브러리가 서로 인터페이스하기 만하면되는 경우 (IMHO) 적절한 C ++ API를 노출하는 것이 좋습니다. 따라서 언어의 모든 기능을 활용할 수 있습니다.
extern "C"
내가 얻지 못한 것들 의 예를 들어 줄 수 있습니까?
.hpp
있지만이 확장명은 "C ++ 헤더 파일"을 의미하므로 .h
C 및 C ++ 모두에 사용 되어야합니다 .
Timo의 답변 외에도 일부 플랫폼 (예 : Windows-Mac OS X의 Linux와 같은 일부 플랫폼)에는 표준화 된 C ++ ABI가 없으므로 기능이 누락되었을뿐만 아니라 그러한 기능을 구현할 수 없습니다.
예를 들어 IIRC MSVC는 각 버전마다 다른 ABI를 가지고 있으며 디버그 또는 릴리스 빌드인지에 따라 변경 될 수 있으며 게시되지 않으므로 타사 컴파일러는 일반적으로 호환되지 않습니다 (일부 버전의 icc는 MSVC와 호환된다는 정보를 읽습니다) 2005 년이지만 NDA에 의해 공개 된 정보 일 수 있습니다. Python을 만든 제작자에게는 필요하지 않습니다.) 및 자체 ABI를 사용하십시오. 따라서 실제로 언어 환경은 컴파일러 버전뿐만 아니라 플래그도 제한합니다.
마지막으로 C ++에는 훨씬 더 많은 컴파일 타임 기능이 있습니다. 예를 들어 제네릭은 일반적으로 동적 형식 언어 등에는 존재하지 않습니다.