개발자 면접 공부/C-C++

네임 맹글링

chogyujin 2024. 4. 14. 19:59
728x90

1. 개요

오늘은 네임 맹글링에 대해 알아보도록 하겠습니다.


2. 네임 맹글링

컴파일러들은 컴파일을 할때 다른곳에서 접근할수 있도록 심볼을 만드는 작업을 합니다.
여기서 함수를 심볼로 만들때 심볼이름을 함수이름 그대로 생성하는 C 컴파일러와 달리 C++컴파일러들은 각각 정해진 규칙에 따라 심볼이름을 변경하여 생성합니다.
이러한 작업을 네임 맹글링이라고 하며 C와 달리 C++에서 오버로딩을 사용할수있는 이유가 됩니다.

 

실제로 코드로 설명해 드리겠습니다.

#include<iostream>

using namespace std;

void test()
{
	cout << "Test" << endl;
}

int main()
{
	test();
	return 0;
}

이러한 코드가 있을때 과연 맹글링을 어떻게 하고 있을까요?

 

결과

출 처 : https://rurustory.com/3

readelf 명령어를 사용하여 확인해보면 실제로 C로 컴파일한 파일은 test 라는 이름으로 심볼이 생성되었고 C++로 컴파일한 파일은 _Z4testv 라는 이름으로 심볼이 생성된걸 확인할 수 있습니다.

 


3. Ref

https://rurustory.com/3

 

[C++] extern "C"와 네임 맹글링

extern "C"와 네임 맹글링 오픈소스같은 곳에 보면 extern "C"라는 문법이 종종 보이는데 처음에 보면 이게 뭐하는거지 C로 컴파일 해준다는건가? 아니면 C문법으로 바꾸어 쓰라는건가? 라고 의문이

rurustory.com