태그 보관물: programming-languages

programming-languages

C ++ Linkage C 이외의 언어? 사용하면 하나의

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와 호환되도록 구현하는 방법입니다.


답변