CS/C++

name mangling

혀니리리 2023. 12. 14. 12:24
728x90

extern C , 맹글링(function name mangling) : 네이버 블로그 (naver.com)

 

extern C , 맹글링(function name mangling)

[C++]extern C카테고리 : C++     2007/03/20 00:01 C++ 프로그램내에서 C함수 ...

blog.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