叮当声:发射是什么意思?

时间:2019-10-07 17:06:02

标签: c++ clang

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

问题

发射是什么意思?

最直接的解释是:发出=生成汇编代码。但是,如果我们检查细节,还有一些悬而未决的问题。

  • 在示例1中,如果我们在未评估的上下文中不使用xFA::M,则警告消失。因此,警告必须在上下文未评估的情况下进行。
  • 在示例1中,FM仅是声明。编译器从不从函数声明生成汇编代码。因此,对此没有任何警告。
  • 当可以证明不使用变量或函数时,
  • Clang有单独的警告。使用-Wunusedexample)进行编译。变量和函数不会生成任何汇编代码,并且警告不使用术语 emit
  • 报告来自-Wunused的警告用于定义,而不是用于声明

我不完全理解示例2。为了完整起见,将其放在此处。在这里发出信号可能意味着稍有不同。

请问有人,也许是clang贡献者,对这些问题进行澄清?

0 个答案:

没有答案