반응형
Notice
Link
스택큐힙리스트
"extern C++"는 어떻게 작동하나요? 본문
반응형
나는 winnt.h
로 점프하여 다음과 같은 코드를 발견했습니다:
extern C++ // 템플릿은 'C' 링크를 가질 수 없습니다
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
다음과 같은 질문을 하고 싶습니다:
extern C++
는 어떻게 작동합니까?- 이것은 GCC와 Clang에서 이식 가능합니까?
- 이 구문을 사용하여 모든 템플릿을 내보낼 수 있습니까?
질문 3에서는, 템플릿의 선언과 정의를 분리하고, 실제로 구현을 제공하지 않고도 템플릿에 대한 동적 링크를 생성할 수 있습니까?
답변 1
그럼 extern C++
은 당연히 C에서는 작동하지 않습니다(비록 일부 컴파일러는 확장으로 지원할 수 있을지 모릅니다). 따라서 C++에서만 사용하는 것이 의미가 있습니다.
왜냐하면 중첩된 여러 개의 extern 링크 지정자의 경우, 가장 안쪽에 있는 것이 적용됩니다. 따라서 헤더 파일을 extern C
로 둘러싼 경우, C++ 링크로 선언하고 싶은 것을 임시로 빠져나오기 위해 extern C++
를 사용할 수 있습니다.
이것은 C++ 라이브러리를 사용하는 실제 사용자를 위해 일반적으로 C 인터페이스를 제공하려는 경우에 가장 의미가 있습니다. 따라서 헤더 전체를 #ifdef __cplusplus \ extern C { \ #endif
로 감싸고, 그 후에 extern C++
를 사용하여 C++ 링크로 복원시킵니다.
답변 2
extern C++은 C++ 언어에서 사용되는 키워드로, C++ 프로그램에서 C 스타일의 함수와 변수를 사용하기 위해 사용됩니다. 이 키워드는 C++ 컴파일러에게 특정 함수들을 C 호출 규칙에 따라 컴파일하라고 지시합니다. 이를 통해 C++ 코드와 C 코드를 혼합하여 사용할 수 있으며, 언어 간 호환성과 상호운용성을 향상시킬 수 있습니다.C++은 객체 지향 프로그래밍 언어로서, C 스타일의 전역 함수들과 상호작용하는 방식이 일반적으로 사용되는 경우가 있습니다. C++은 함수를 오버로딩하고, 네임스페이스를 사용할 수 있으며, 클래스와 객체 등을 정의할 수 있는 등의 기능을 제공합니다. 반면에 C 언어는 이러한 기능들을 제공하지 않습니다. 그러므로, C 코드에서 C++ 함수를 호출하거나, C++ 코드 안에서 C 코드를 사용하기 위해서는 이러한 차이를 극복해야 합니다.
이때 extern C++ 키워드가 사용됩니다. 이 키워드는 C++ 함수를 C 스타일의 함수로 선언하고 정의하도록 지시합니다. extern C++을 사용하면 C++ 컴파일러는 해당 함수를 C 스타일의 함수처럼 처리하며, C 호출 규칙에 따라 컴파일된 이 함수는 C 코드에서 직접 호출 가능한 형태를 갖게 됩니다. 이렇게 함으로써, C++ 코드와 C 코드를 혼합하여 사용할 수 있게 되며, 언어 간의 호환성과 상호운용성을 개선할 수 있습니다.
extern C++을 사용하는 방법은 간단합니다. C++ 함수를 선언하고 정의할 때, 해당 함수를 extern C++ 선언으로 감싸주기만 하면 됩니다. 이제 해당 함수는 C++ 컴파일러가 아닌 C 컴파일러에 의해 컴파일될 수 있습니다.
예를 들어, 아래와 같이 C++ 코드에서 extern C++을 사용하여 C 스타일의 함수를 호출하도록 지정할 수 있습니다.
```cpp
extern C++ {
void myFunction(int arg1, float arg2);
}
```
위 코드는 C++에서 사용되는 myFunction을 C 스타일의 함수로 선언하는 예시입니다. C 코드에서는 이 함수를 일반적인 C 스타일의 함수처럼 사용할 수 있습니다.
extern C++은 C++ 코드와 C 코드 간의 인터페이스에서 중요한 역할을 합니다. C와 C++은 개발자들 사이에서 널리 사용되고 있는 언어이며, 두 언어 간의 상호작용은 매우 중요합니다. extern C++을 사용하면 C++ 코드와 C 코드를 혼합하여 사용할 수 있으며, 이로써 기존의 C 코드를 활용하면서도 C++의 객체 지향적인 특성을 살릴 수 있습니다.
어느 프로그래밍 프로젝트에서든지, 코드 재사용과 기능 확장은 핵심적인 요소입니다. extern C++ 키워드를 통해 다양한 언어로 작성된 코드들을 쉽게 통합하고, 호환성을 유지할 수 있게 됩니다. 이는 대규모 프로젝트에서 특히 유용하며, 개발자들에게 많은 혜택을 제공합니다. 따라서 extern C++ 키워드는 C++ 언어에서 중요한 개념 중 하나로, 유용한 기능을 제공하는 것으로 알려져 있습니다.
이와 같이, extern C++은 C++ 코드와 C 코드를 함께 사용할 수 있도록 하는 중요한 키워드입니다. C와 C++ 사이의 호환성을 확보하고, 코드의 재사용성을 향상시키는 데에 도움이 됩니다. C++, C 언어를 사용하는 프로그래머라면 extern C++에 대한 이해와 활용은 필수적입니다.
반응형
Comments