프로그램/C,C++
[C++ 기본3] 8. mangling
naudhizb
2022. 5. 15. 19:39
반응형
C++ 은 C가 아니다.
C++와 C는 거의 호환되는 것처럼 보이지만, 실제로는 다르게 동작하고 있다.
C++에서는 C에서 지원하지 않는 다형성과 같은 특징을 지원하고 있으며, 이를 위해서 mangling이라는 구조를 도입하여 여러 함수들과의 충돌을 방지하고 있다.
mangling 방법은 컴파일러별로 상이하다.
// 9_mangling
// C 로 컴파일 하면 : 함수이름 Add(gcc), _Add(vc)
// C++로 컴파일 하면 : ?Add@XXYYH@Z(VC++), ??(g++)
// name mangling : C++ 컴파일러가 함수이름을 변경하는 것
// => 함수 오버로딩 때문에 Add 함수가 여러개 일수 있으므로
int Add(int a, int b)
{
return a + b;
}
int main()
{
Add(1, 2);
}
// Add.h
// extern "C" : 함수 또는 변수가 C언어의 mangling을 사용한다고
// 알려 주는 것
//extern "C" int Add(int a, int b);
// 결론 : C언어로 라이브러리 만들때 꼭 헤더를 아래 처럼 만드세요
// 그러면 Add 함수는 .c 와 .cpp에서 모두 사용가능합니다.
// 새로운헤더.h
#ifdef __cplusplus
extern "C" {
#endif
//#include"못건드리는 헤더"
int Add(int a, int b);
#ifdef __cplusplus
}
#endif
// Add.c
int Add(int a, int b)
{
return a + b;
}
// main.c
#include "Add.h"
int main()
{
Add(1, 2);
}
#include<stdio.h>
printf("heelo");
반응형