name mangling
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 }