2009-05-13 4 views
1

g ++ 컴파일러를 사용하는 Linux에서 Intel 코드 적용 도구를 사용하고 있습니다. 특정 클래스의 경우, 커버리지 툴은 소스 코드에 실제로 존재하는 것보다 2/3 여분의 기능을 보여준다.코드 적용 범위에 컴파일러 생성 코드

이러한 추가 기능은 무엇입니까? 그들은 컴파일러 함수를 생성합니까?

코드 적용 범위에서 헤더 파일을 제외합니다. 수업은 빈 ctor 및 dtor로 간단합니다.

다음 함수는 컴파일러에서 생성 된 것 같습니다.

  1. 복사 생성자
  2. 는 할당 연산자는
  3. 는 매크로
  4. 신호 슬롯 연결 메커니즘 (예에서 Qt는 MOC 컴파일러이 발생)
+1

표시되는 함수 이름의 예제를 제공하는 것이 유용 할 수 있습니다 ... –

+0

I 1/2 기능은 ctor에 _zn 기호가 첨부되어 있습니다. 하지만 때로는 이러한 추가보고 기능을 볼 수 없습니다. –

+0

나는 "yax 클래스에서, 다음과 같은 추가 함수를 볼 수있다"라고 생각했다. 전체 함수 이름 목록과 함께 클래스 선언을 선호했다. –

답변

1

blog entry (제 경우 없음) (관심 GDB로 디버깅)은 왜 "여분의"생성자를 볼 수 있는지 설명합니다.

gcc는 생성자에 대해 두 개의 고유 한 기능 본문을 생성합니다. 하나는 모든베이스를 포함하여 전체 객체를 구성하는 일반 객체입니다. 또 다른 하나는 가상 기본 클래스를 제외한 모든 것을 구성합니다. 이런 일이 발생하면 gcc는 가상베이스가 전혀없는 클래스에 대해서도 두 생성자를 모두 내 보냅니다.