extern "C" 메커니즘은 C 언어로 작성된 코드와의 상호작용을 가능하게 합니다. 이를 통해 C 라이브러리를 사용할 수 있고, C++와 다른 언어 간의 연결을 용이하게 합니다.
문제의 역사: 처음부터 C++ 언어는 C를 기반으로 구축되었지만, 함수 오버로딩 및 기타 기능을 지원하기 위해 'name mangling'을 포함하여 몇 가지 특징이 있었습니다.
문제: C++에서 함수 이름은 추가적인 구조를 가진 심볼(mangled)로 컴파일되지만, C에는 그러한 변환이 없습니다. 결과적으로 C 코드를 C++ 컴파일러에 간단히 연결할 수 없습니다.
해결책:
extern "C" 구조로 함수를 포장하면 'name mangling'이 비활성화되어 C 컴파일러로 컴파일된 코드에서 이를 볼 수 있게 됩니다.
코드 예:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
주요 특징:
extern "C"로 함수를 오버로딩할 수 있나요?
아니오, 표준 C 함수 이름이 사용되므로 오버로딩이 불가능합니다.
템플릿 함수를 extern "C"로 선언하면 어떻게 되나요?
컴파일 오류가 발생합니다. 템플릿은 C++의 별도 기능이며 C에서 지원되지 않습니다.
개별 클래스 수준에서 extern "C"를 사용할 수 있나요?
아니오, 함수와 변수에만 사용 가능하며, 클래스나 메서드에는 사용할 수 없습니다.
C++ 프로젝트가 extern "C" 없이 외부 C 라이브러리를 연결하면 코드가 심볼 이름 불일치로 인해 링크되지 않습니다.
장점:
단점:
외부 C 라이브러리를 통합할 때 헤더 파일에서 extern "C"를 사용합니다.
장점:
단점: