避免仅在源文件

时间:2018-05-22 08:43:28

标签: c++ clang qt-creator vtable

据我所知,类类至少需要在源文件(out of line)中定义一个虚函数,否则需要将vtable插入到每个目标文件中。

我有以下情况:

//foo.cpp

struct Foo {
virtual int Bar() { return 1; }
virtual ~Foo() = default;
};

Qt Creator(4.5.2)中的clang代码模型为Foo发出-Wweak-table警告。
严格来说,警告是正确的,因为vtable将包含在每个翻译单元中。实际上,它是没有价值的,因为无论如何,vtable只在foo.o中发出。

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

2 个答案:

答案 0 :(得分:3)

事实证明,默认情况下,独立的clang做正确的事情,只有Qt创建者中的clang代码模型显示无用的警告。它已被报告为QTCREATORBUG-19741,因此除了等待更新的Qt创建者版本之外别无其他。

答案 1 :(得分:0)

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

在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