C ++ 언어를 사용하면 하나의 소스 파일에서 C ++와 C를 혼합 할 수 있습니다. 예를 들어
extern "C" {
struct bar { /* ... */ }
}
C ++ 또는 C 이외의 다른 “링크 언어”를 지원 한 적이 있습니까? 예 extern "Pascal"
또는extern "Haskell"
답변
extern "C"
유일하게 필요한 것일 수 있습니다.
모든 구현은 C 프로그래밍 언어로 작성된 함수 “C”에 대한 링크 및 C ++ 함수 “C ++”에 대한 링크를 제공해야합니다.
그러나이 인용에 따라 다른 사람들이 존재할 수 있습니다.
문자열 리터럴은 필요한 언어 연결을 나타냅니다. 이 국제 표준은 문자열 리터럴 “C”및 “C ++”의 의미를 지정합니다. “C”또는 “C ++”이외의 문자열 리터럴 사용은 구현 정의 시맨틱과 함께 조건부 지원됩니다. [참고 : 따라서 구현에 알려지지 않은 문자열 리터럴을 사용하는 연결 사양에는 진단이 필요합니다. — end note] [참고 : 문자열 리터럴의 철자는 해당 언어를 정의하는 문서에서 가져 오는 것이 좋습니다. 빈티지에 따라 ADA (ADA 아님) 및 Fortran 또는 FORTRAN이 있습니다. — 끝 참고]
답변
많은 (대부분의) 환경에서 “외부”C “는 시스템의 모든 언어에 대한 기본 연결 규칙입니다.
따라서 운영 체제 및 “외국어” “extern C”구현에 따라 컴파일 된 다른 언어로 프로그램을 호출하면됩니다.
답변
어느 시점에서 G ++는 extern "Java"
GCJ 컴파일 Java 코드와 상호 작용하도록 지원 되었습니다.
https://stackoverflow.com/questions/15167867/extern-java-block-in-gcc
답변
-
아니! C ++는 “연결 언어”로 C 만 지원합니다.
-
extern “C”{struct bar {/ * … * /}}
-
위의 구문은 변수, 구조체 또는 함수의 이름을 변경하지 않음을 의미합니다. C ++는 변수, 구조체 또는 함수의 이름을 변경하여 클래스, 네임 스페이스 및 함수 오버로드를 구현할 수 있습니다.
-
이 작업을 수행하지 않으면 링커에서 변수의 객체, 함수의 구조체를 찾을 수 없습니다.
-
C ++는 C와 호환되도록 설계되었습니다. extern “C”는 C와 호환되도록 구현하는 방법입니다.