代码之家  ›  专栏  ›  技术社区  ›  tstenner

避免对仅在源文件中定义的类发出弱vtable警告

  •  3
  • tstenner  · 技术社区  · 6 年前

    我知道类类需要在源文件中定义至少一个虚拟函数( out of line ,否则需要将vtable插入到每个对象文件中。

    我有以下情况:

    //foo.cpp
    
    struct Foo {
    virtual int Bar() { return 1; }
    virtual ~Foo() = default;
    };

    qt creator(4.5.2)中的clang代码模型为foo发出-wweak表警告。
    严格来说,警告是正确的,因为vtable将包含在每个翻译单元中。实际上,这是毫无价值的,因为不管怎样,vtable都只在foo.o中发出。

    如何仅对源文件中定义的类禁用-wweak vtables?

    2 回复  |  直到 6 年前
        1
  •  3
  •   tstenner    6 年前

    结果表明,默认情况下,独立clang做的是正确的事情,只有qt creator中的clang代码模型显示了无用的警告。据报道 QTCREATORBUG-19741 ,所以除了等待更新的qt creator版本之外,没有其他事情可以做。

        2
  •  0
  •   Sandburg    6 年前

    不太确定,但在我工作的地方,我们有一些在本地化源中禁用警告的实践。

    在Windows下:

    #pragma warning(push)
    #pragma warning(disable : 4820)
    //Rest of your includes (cstdio, vector...)
    #pragma warning(pop) //For /Wall
    

    根据GCC,如下:

    #pragma GCC diagnostic push 
    #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
    //Rest of your includes (cstdio, vector...)
    #pragma GCC diagnostic pop