2012-11-22 2 views

답변

0

내 머리에 튀어 나온 첫 번째 생각은 맹 글링하는 이름이었습니다. C++에는 있지만 C 언어에는없는 동일한 이름이지만 매개 변수가 다른 두 가지 메소드를 사용할 수 있습니다. 컴파일러는 두 메소드를 구별해야하므로 내부적으로 이름을 변경 (mangle)합니다.

C++ 컴파일러가 C에서 수행해야하는 또 다른 사항은 클래스 상속을 처리하는 것입니다. 추상 클래스, 재정의 된 메소드 및 가상 메소드가 있습니다. 그건 좀 더 처리가 필요합니다.

0

나는 이것을 아주 잘 이해한다고 말할 수는 없지만,이 blog entry by Ian Lance Taylor에 답이있는 것 같습니다. 아래에서 인용 :

C++을 사용할 때 몇 가지 특별한 문제가 있습니다. 새로운 가상 메소드를 클래스에 추가하는 것은 해당 클래스를 사용하는 모든 함수에 대한 ABI 변경이 될 수 있습니다. 이러한 상황에서 역 호환 가능한 버전의 클래스를 제공하는 것은 매우 어색합니다. 가상 테이블이나 이전 버전의 RTTI 정보에 사용할 이름과 버전을 지정하는 자연스러운 방법은 없습니다.

물론 기호를 삭제해서는 안됩니다.

더 많은 내용을 보려면 항목을 읽어보십시오. (ABI = 응용 프로그램 바이너리 인터페이스)