В справочнике по диагностике лягушки четыре раза используется слово emit . Следующие предупреждения используют этот термин.
Пример 1 : скомпилируйте это с помощью -Wunneeded-internal-declaration
-Wunneeded-member-function
:
namespace {
int x;
int F ();
struct A {
void M ();
};
}
decltype (x) global1;
decltype (F ()) global2;
decltype (&A::M) global3;
Вы получитеследующие предупреждения:
warning: variable 'x' is not needed and will not be emitted
warning: function 'F' is not needed and will not be emitted
warning: member function 'M' is not needed and will not be emitted
Пример 2 : скомпилируйте это с помощью -Wweak-vtables
-Wweak-template-vtables
:
class Apple {
virtual ~Apple () {}
};
template <class T>
class Pear {
virtual void Foo () {}
};
template class Pear<void>;
Вы получите следующеепредупреждения:
warning: 'Apple' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit
warning: explicit template instantiation 'Pear<void>' will emit a vtable in every translation unit
Вопрос
Что означает излучение?
Наиболее простым объяснением будет: emitting = генерация кода сборки. Но есть некоторые открытые вопросы, если мы рассмотрим детали.
- В примере 1, если мы не используем
x
, F
и A::M
в неоцененном контексте, предупреждения исчезают. Таким образом, предупреждение должно быть связано с неопределенным контекстом. - В примере 1
F
и M
являются только объявлениями. Компилятор никогда не генерирует ассемблерный код из объявления функции. Поэтому нет смысла предупреждать об этом. - Clang имеет отдельные предупреждения для случая, когда можно доказать, что переменная или функция не используются. Скомпилируйте с
-Wunused
( пример ). Из переменной и функции не генерируется код сборки, и в предупреждениях не используется термин emit . - Предупреждения, полученные из
-Wunused
, сообщаются для определений а не декларации .
Я не совсем понимаю пример 2. Я приведу его здесь для полноты картины. Излучение может означать немного другое.
Может ли кто-то, может быть, участник clang дать некоторые разъяснения по этим вопросам?