clang diagnostics reference使用 emit 一词四次。以下警告使用此术语。
Example 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
Example 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
问题
发射是什么意思?
最直接的解释是:发出=生成汇编代码。但是,如果我们检查细节,还有一些悬而未决的问题。
x
,F
和A::M
,则警告消失。因此,警告必须在上下文未评估的情况下进行。F
和M
仅是声明。编译器从不从函数声明生成汇编代码。因此,对此没有任何警告。-Wunused
(example)进行编译。变量和函数不会生成任何汇编代码,并且警告不使用术语 emit 。-Wunused
的警告用于定义,而不是用于声明。我不完全理解示例2。为了完整起见,将其放在此处。在这里发出信号可能意味着稍有不同。
请问有人,也许是clang贡献者,对这些问题进行澄清?