728x90
extern C , 맹글링(function name mangling) : 네이버 블로그 (naver.com)
c++는 오버라이딩을 허용하기 때문에 함수 이름이 겹칠 수 있어
컴파일러가 임의로 함수나 변수의 이름을 변경하는 것
컴파일러마다 다른 맹글링규칙을 가지고 있음
필요성 ) C++는 C를 포함함.
그런데 만약 C 컴파일러로 컴파일된 오브젝트 파일이나 라이브러리만 C++에서 써야한다면
C함수를 사용하고자 한다면 그 함수의 원형을 C++ 코드에 선언시켜주고 C오브젝트 파일이나 라이브러리와 링크시켜서 C함수 정의 문제를 해결해줘야함!
C함수에 대해 맹글링이 일어나지 않도록 하려면?
extern "C"
{
#include "swap.h"
}
[extern "C"의 의미]
extern "C"문장은 맹글링을 하지 말라는 지시문이다.
그렇다면 C의 표준 라이브러리 함수, 예를 들어 printf()를 사용할 때도 extern "C"문장을 항상 적용해야 하는가?
만약, 함수 원형을 개별적으로 선언하고 사용하려면 적용해야 한다.
1 // printf.cpp
2
3 extern "C" int printf( const char *... ) ;
4
5 void main()
6 {
7 printf( "야!" ) ;
8 }
728x90
'CS > C++' 카테고리의 다른 글
다형성 (0) | 2024.01.09 |
---|---|
static 변수 (0) | 2024.01.05 |
이동 의미론 ( move semantics) (0) | 2023.12.14 |
L value 와 R value (0) | 2023.12.14 |
얕은복사 / 깊은복사 (0) | 2023.12.14 |