외부 "C++"를 사용하는 이유는 무엇입니까?
이 문서에서는 키워드 extern 뒤에 "C" 또는 "C++"를 붙일 수 있습니다.외부 "C++"를 사용하는 이유는 무엇입니까?실용적입니까?
언어에는 다음이 있습니다.
extern "C" {
#include "foo.h"
}
만약 foo.h에 C++링크가 필요한 것이 포함되어 있다면?
void f_plain(const char *);
extern "C++" void f_fancy(const std::string &);
그래야 링커를 행복하게 할 수 있어
왜 그렇게 해야 하는지는 모르겠지만 Sun의 이 기사에 따르면 외부 "C" 블록 안에 있는 외부 "C++"를 사용하여 "C" 함수 그룹에 네이티브 C++ 링크가 있는 특정 함수를 지정할 수 있습니다.
extern "C" {
void f(); // C linkage
extern "C++" {
void g(); // C++ linkage
extern "C" void h(); // C linkage
void g2(); // C++ linkage
}
extern "C++" void k();// C++ linkage
void m(); // C linkage
}
사용할 .extern "C++"
암묵적인 디폴트인 링크를 명시할 뿐입니다.일부 멤버가 외부 "C" 링크를 가지고 있는 클래스가 있는 경우, 다른 멤버가 외부 "C++"라는 명시적인 상태를 원할 수 있습니다.
으로 C++를 정의하고 .extern "anystring"
한다.extern "C"
★★★★★★★★★★★★★★★★★」extern "C++"
롭게 정의할 수 extern "Pascal"
또는 심지어extern "COM+"
츠키노
외부 "C"는 많은 사람들이 대답합니다.extern "C++"의 사용 사례는 C 함수의 C++ 라이브러리 함수를 호출하는 경우입니다.관련된 서브유스 케이스는 C++ 라이브러리를 메인 함수와 C 소스 코드로 링크하는 경우입니다.자세한 내용은 다음 Wiki 페이지를 참조하십시오.
두 가지 추측:
- ★
extern "C"
C C++ 언어 연동을 얻을 수 .extern "C++"
. - 되어 있다
C++
링크, C++를 정의하는 문서이기 때문입니다. 더 잘 할 수 있습니까?C++
그 자체보다 더 많은 언어 연결성을 가지고 있습니다.또한 완전성도 제공합니다.signed/unsigned
다음 답변을 읽어보십시오.extern "LanguageName"
에는 (', GCC')가 있습니다.extern "Java"
도 마찬가지입니다을 사용하다
간단히 말하면 외부 C를 사용하여 컴파일러에 이름 망글링을 사용하지 않도록 지시할 수 있습니다.즉, 같은 프로젝트에서 C와 C++ 코드의 비트를 링크할 수 있습니다.
extern "C"는 C++ 함수에 C 링크가 있어야 함을 나타낼 때 사용됩니다.이것은 실장에 의존하지만, 통상은 C++ 네임 매니징(그리고 오버로드와 엄격한 타입 체크)을 오프합니다.C++ 함수가 있는 경우 C 코드에서 호출할 수 있습니다.
extern "C" void Foo(); // can be called easily from C
외부 "C++"는 C++ 스탠다드에서는 허용되지만 실제 코드로 본 적은 없습니다.수술 금지인가 봐요.
C와 C++는 다른 이름 망글링 규칙을 사용합니다.기본적으로 외부 "C"는 C++ 컴파일러에게 함수의 이름을 C가 지정하는 것과 같이 지정하도록 지시합니다.
사용할 링크 규칙을 지정합니다.대부분의 언어는 "C" 스타일 함수와 연결하는 방법을 알고 있습니다.
이것은, 다음의 2개의 경우에 필요합니다.
- C++로 작성된 함수를 호출하는 C(또는 해당 문제에 대한 다른 언어) 프로그램
- C로 작성된 함수를 호출하는 C++ 프로그램
예:
// declared in function.h
void f1(void);
오브젝트 테이블의 이름이 C++ 규약을 사용하기 때문에 C 코드(실제로 다른 언어도 C 함수와 링크할 수 있음)는 링크할 수 없습니다.
쓰시면
extern "C" void f1(void);
이 링크는 C 표기법을 사용하기 때문에 동작합니다.
extern 'C'를 사용하는 이유 1위는 C++의 이름 뭉개기 규칙을 피하기 위해서입니다.이것은 에서 작업하는 경우 매우 중요합니다.특정 네이티브 기능으로 PInvoke 하고 싶은 넷 언어.이를 수행하려면 이름 망글링을 비활성화해야 합니다.
두 번째 질문에 대답하자면, "실용적인가?"":
다음과 같은 표준 헤더에서는 실용적이고 실질적으로 피할 수 없습니다.<cmath>
.
헤더 전용 라이브러리 X.h는 C++와 C의 공통 서브셋으로 쓰여져 양쪽 언어에서 사용되도록 되어 있습니다.C++ 사용자의 편의를 위해 X.h에는 다음이 포함됩니다.<cmath>
,것은 아니다.<math.h>
이 방법은 C 사용자에게는 적용되지 않습니다.<cmath>
모든 것을 에 끼워 넣다extern "C++" {
...}
.
언급URL : https://stackoverflow.com/questions/610934/why-would-you-use-extern-c
'sourcecode' 카테고리의 다른 글
PHP 다른 네임스페이스에서 모든 클래스를 가져오는 방법 (0) | 2022.09.06 |
---|---|
요소가 존재할 때까지 기다리는 방법 (0) | 2022.09.06 |
PDOException SQLSTATE[HY000] [2002] 해당 파일 또는 디렉터리가 없습니다. (0) | 2022.09.06 |
배열에 JavaScript/jQuery에 특정 문자열이 포함되어 있는지 확인하는 방법 (0) | 2022.09.06 |
MySQL 최적화: Different가 너무 느리다 (0) | 2022.09.06 |