February 18, 2008

C++ method to C function

Bjarne Stroustrup이 처음 C++를 개발하고, 만든 컴파일러는 C++ 코드를 C로 변환한 후, 이를 다시 C컴파일를 이용하여 기계어로 번역하는 방식이었다. 그리고 이러한 방식은 현재의 컴파일러에서도 변하지 않고 사용되고 있다.
C++의 method는 C의 function으로 다음과 같이 변환된다.

CClass::Method(TYPE parma1, TYPE parma2); // C++ method
Method(CClass *thisptr, TYPE param1, TYPE param2); // converted C function

Bjarne Stroustrup

Bjarne Stroustrup은 덴마크 사람으로 C++를 만든 사람이다.
발음은 찾아본 바로는 대략 "뷔야(른)ㅡㄴ 스트루스트럽 (r 발음은 빠른 발음 때문에 거의 묵음화)" 정도 인듯 하다 (발음 듣기).
가장 많이 사용하는 C++를 누가 만들었는지 정도는 알아두자.

Name Mangling

function, structure, class, variable의 이름이 같은 경우 생길 수 있는 문제점을 방지하기 위해서 이름과 추가적인 정보를 encoding하여 내부적으로 사용되는 이름을 생성하는 방법이다. Name Decoration이라고도 불리며, C에서는 이를 사용하지 않지만, C++에서는 이를 사용한다. 예를 들어, C++에서 polymorphism이 적용된 함수의 경우, 이름은 같지만 파라미터가 다르낟. C에서는 이러한 함수의 식별이 불가능하지만, C++에서는 Name Mangling을 이용하여, 서로다른 함수로 십결이 가능하다.

Name Mangling에는 표준이 없고, 컴파일러 나름대의 방법을 사용한다. 그러므로, 컴파일러가 동일하다면, Name Mangling을 통해서 encoding된 이름이 동일하지만, 그렇지 않을경우 이름이 동일하다는 보장을 할 수 없다 (DLL에서 extern "C"를 사용하는 이유).