extern(C++)
C++ 언어 extern 키워드(keyword) 대한 가이드입니다.
learn.microsoft.com
- const를 쓰지 않은 extern 함수나 변수: 어느 한 파일에서 전역으로 정의 및 선언, 다른 파일에서의 extern은 그 파일에서 값을 찾아와 적용시키는 역할. => extern 키워드나 전역선언으로 같은 이름을 사용할시 LNK error 발생
- const를 쓴 extern 변수: external 링크가 있음을 지정. 시작부터 extern으로 사용할 거라고 못박는 느낌. (전역변수는 기본적으로 내부(internal?) 링크가 있음)
- extern "C" (함수A): 함수A가 다른 곳에서 정의되고 이는 C언어 호출 규칙을 사용한다고 지정. 만약 전역함수와 함수A가 구성이 같다면(이름, 반환 값등) extern을 활용한 선언이 우선 선언되어야한다.
- extern 템플릿 선언에서는, 이 템플릿으로 다른 곳에서 인스턴스를 만들 수 있다는 것을 의미한다. 이 표현식이 있는 현재 위치보다는 다른 위치에서 객체를 생성할 수 있다고 컴파일러에게 알리는 것을 의미한다. Explicit를 통한 instatiation 내용 참조
- extern constexpr :
> VS2017버전의 15.3이전에서는 extern이라고 언질을 줬어도 내부링크를 제공하였다. 15.5이후 부터는 /Zc:externConstexpr 컴파일러 스위치가 올바른 정석적인 행동을 가능하게 한다 => 이 옵션이 디폴트 & 내부링크는 제공되지 않을 듯?
> /permissive- 옵션으로는 /Zc:exterConstexpr를 가능하게 하진 않는다.
> 만약 헤더 파일이 extern constexpr로 선언된 변수를 포함할 때, __declspec(selectany)을 끼워 넣으면 중복된 선언이 합쳐질 수 있다. => selectany 옵션은 링크 타임에 들어온(= 최소 1개 이상의 extern 키워드를 통한 선언) 수많은 선언 중 하나를 골라 나머지는 무시하는 옵션이다.
'개발자로 > Cpp' 카테고리의 다른 글
Cpp, constexpr (0) | 2024.04.16 |
---|---|
Cpp, mutex (0) | 2024.03.30 |
Cpp, 스마트 포인터 (0) | 2024.03.29 |
Cpp, 테스팅 메모 (0) | 2023.10.05 |
Cpp, 정규 표현식 (0) | 2023.10.04 |