gcc warning"将在'

我从第三方代码中得到了很多这些警告,我不能修改。 有没有办法禁用这个警告,或者至少在某些区域禁用它(比如vc++中的#pragma push/pop)?< / p >

例子:

list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning:   `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
169835 次浏览

你可以用-Wno-reorder禁用它。

使用-Wno-reorder (man gcc是你的朋友:))

确保成员在初始化列表中出现的顺序与它们在类中出现的顺序相同

Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

或者你可以把-Wno-reorder

对于那些使用QT有此错误的人,将此添加到.pro文件中

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder

初始化的顺序不重要。所有字段都按照它们在类/结构中定义的顺序进行初始化。但如果初始化列表中的顺序不同,gcc/g++会产生此警告。只需更改初始化顺序即可避免此警告。但是在构造字段之前,不能在初始化中定义字段using。这将是一个运行时错误。你改变了定义的顺序。小心,保持注意力!

如果你看到来自库头的错误,并且你正在使用GCC,那么你可以通过使用-isystem而不是-I包含头来禁用警告。

类似的特性存在于铿锵声中。

如果你在使用CMake,你可以为include_directories指定SYSTEM

Class C {
int a;
int b;
C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

顺序很重要,因为如果a在b之前初始化,并且a依赖于b,则会出现未定义的行为。