2009-05-13 3 views
1

Я использую инструменты для покрытия кода Intel в Linux с помощью g ++-компилятора. Для определенного класса инструмент покрытия показывает 2/3 дополнительных функций, чем те, которые действительно присутствуют в исходном коде.Компилятор сгенерированный код в покрытии кода

Что это за дополнительные функции? Являются ли они сгенерированными компилятором функциями?

Я исключаю файлы заголовков из покрытия кода. Мои занятия просты с пустым ctor и dtor.

Я думаю, что следующие функции генерируются компилятором.

  1. Конструктор копирования
  2. Оператор присваивания
  3. Macro (Не в моем случае)
  4. механизмов подключения сигнальных слотов (например, в Qt MOC компилятор генерирует эти)
+1

Может быть полезно привести некоторые примеры имен функций, которые вы видите ... –

+0

I 1/2 функции с символом _zn, прикрепленным к ctor. Но иногда я не вижу этих дополнительных сообщенных функций. –

+0

Я думал о чем-то вроде «для класса yax, я вижу следующие дополнительные функции» со списком полных имен функций и предпочтительно объявления класса. –

ответ

1

Это blog entry (касается отладка с помощью GDB) объясняет, почему вы видите «дополнительные» конструкторы.

gcc генерирует два различных тела функций для конструктора. Один из них является регулярным, который строит весь объект, включая все базы. Другой строит все, кроме виртуальных базовых классов. Как это бывает, gcc испускает оба конструктора даже для классов, у которых вообще нет виртуальных баз.

Смежные вопросы