C는 여전히 가장 오래된 언어 중 하나입니다. ABI는 단순하며 오늘날에도 여전히 사용되고있는 거의 모든 운영 체제가 여기에 작성되었습니다 . 이러한 OS 중 일부는 C # / .NET 또는 맨 위에있는 항목을 추가했을 수 있지만 아래에서 C에서는 매우 가파 릅니다.
즉 , OS에서 제공하는 기능 을 사용 하려면 사실상 모든 프로그래밍 언어가 C 라이브러리와 인터페이스 할 수있는 방법이 필요했습니다 . Perl, Java, C ++는 모두 기본적으로 "토론 C"를 할 수있는 방법을 제공합니다. 왜냐하면 모든 휠을 재발 명하고 싶지 않다면 필요했습니다.
이것은 C를 프로그래밍 언어의 라틴어로 만듭니다. (비유가 나오기 전에 몇 년 동안 인터넷이 "프로 게밍 언어의 영어"여야합니까?)
C로 라이브러리를 작성하는 경우 C 호환 인터페이스가 무료로 제공됩니다. C ++로 라이브러리를 작성하는 경우 언급 한대로 선언을 통해 C 바인딩을 얻을 수 있습니다extern "C"
.
그러나 C로 표현할 수있는 기능에 대해서만 바인딩을 얻을 수 있습니다 .
따라서 라이브러리 API는 사용할 수 없습니다 ...
- 템플릿,
- 클래스,
- 예외
- 객체를 가져 오거나 반환 하는 함수
간단한 예를 들어, 내 보낸 함수 가 배열 ( ) 대신 (또는 그 문제) 배열을 가져 오고 반환 하도록해야합니다 .[]
std::vector
std::string
따라서 C ++이 라이브러리 클라이언트에 제공해야하는 장점을 제공 할 수 없을 뿐만 아니라 라이브러리 API를 C ++에서 "C 호환 가능"( " extern "C"
) 으로"번역 "하기 위해 추가 노력을 기울여야합니다 .
포인트가 이유입니다 수있는 C 라이브러리를 구현하기위한 더 나은 선택이라고 할. 개인적으로 저는 C ++의 이점이 여전히 extern "C"
API에 필요한 노력보다 중요하다고 생각 하지만 그것은 저뿐입니다.