링크 사양
"연결 사양" 서로 다른 언어로 작성 된 함수 (또는 프로시저) 연결에 대 한 프로토콜을 의미 합니다.다음과 같은 호출 규칙이 영향을 받습니다.
대/소문자 구분 이름입니다.
장식의 이름입니다.C에서 컴파일러 이름을 밑줄을 붙입니다.이 "장식" 라고 C + +에서는 이름 데코레이션 링크 단계를 통해 유형 정보를 유지 하는 데 사용 됩니다.(참조 하십시오 데코레이팅된 이름)
스택에서 인수를 예상 하는 순서입니다.
함수 스택에서 조정에 대 한 책임을 반환 합니다.호출 하는 함수 또는 호출된 된 함수가 담당합니다.
(여부 숨겨진된 인수가 전달 되는지) 숨겨진된 인수를 전달 합니다.
extern string-literal { declaration-list }
extern string-literal declaration
링크 사양이 점차적으로 기존 코드를 사용 함으로써 C 코드를 C++를 포팅 용이 합니다.
Microsoft 전용
현재 Microsoft C++에서 지원 되는 유일한 연결 사양 "C" 및 "C++".
Microsoft 특정 끝
다음 예제 함수 선언 atoi 및 atol C 링크가:
extern "C"
{
int atoi( char *string );
long atol( char *string );
}
이러한 함수를 호출 하는 C 링크를 사용 하 여 이루어집니다.이러한 두 개의 선언으로 같은 결과 얻을 수 있습니다:
extern "C" int atoi( char *string );
extern "C" long atol( char *string );
Microsoft 전용
모든 Microsoft C 표준 C++ 컴파일 감지 파일 사용 조건부 컴파일 지시문을 포함 합니다.C + + 컴파일 감지 되 면 프로토타입에 포함 되어 있는 extern "C" 지시문을 다음과 같이:
// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif
// Function declarations
#if defined(__cplusplus)
}
#endif
Microsoft 특정 끝
표준 포함 파일으로의 함수를 선언 하지 않아도 extern "C".
오버 로드 된 함수의 경우 함수 이름이 같은 한 번 링크 지정자를 가질 수 있습니다.(자세한 내용은 함수 오버 로드입니다.)
다음 표에 다양 한 링크 사양 작업을 보여 줍니다.
링크 사양의 효과
사양 |
Effect |
---|---|
개체에 |
오브젝트의 연결을 영향을 줍니다. |
함수 |
영향을 링크 함수 모두 함수 또는 개체 안에 선언 |
클래스에서 |
비멤버 함수와 클래스 내에서 선언 된 개체의 연결을 영향을 줍니다. |
함수 두 개 이상의 링크 사양이 서로 일치 해야 합니다 경우. 이는 C 및 C++를 모두 포함 하는 함수를 선언 하는 오류입니다.뿐만 아니라 두 선언은 함수를 프로그램에서 발생할 경우 — 연결 사양 및 없이 하나 하나-연결 사양 사용 하 여 선언을 첫 번째 여야 합니다.모든 중복 선언은 연결 사양에 이미 있는 함수는 첫째 선언에 지정 된 링크가 제공 됩니다.예를 들면 다음과 같습니다.
extern "C" int CFunc1();
...
int CFunc1(); // Redeclaration is benign; C linkage is
// retained.
int CFunc2();
...
extern "C" int CFunc2(); // Error: not the first declaration of
// CFunc2; cannot contain linkage
// specifier.
함수와 개체를 명시적으로 선언 하는 정적 복합 링크 지정자의 본문 내에서 ({}) 정적 함수 또는 개체 이름으로 취급 됩니다 링크 지정 자가 무시 됩니다.다른 함수와 개체를 사용 하 여 선언 된 것 처럼 동작의 extern 키워드입니다.(참조 하십시오 지정 된 링크를 사용 하 여 extern 에 대 한 자세한 내용은 extern 키워드입니다.)