序言:我知道,禁用警告不是一个好主意。无论如何,我对此有一个技术问题。
使用GCC 3.3.6,我收到以下警告:
choosing ... over ... because conversion sequence for the argument is better.
现在,我想通过提供类似
的参数来禁用gcc warning options中所述的警告-Wno-theNameOfTheWarning
但我不知道警告的名称。 如何找出禁用此警告的选项名称?
我无法修复警告,因为它发生在无法更改的外部库的标头中。它在boost序列化(rx(s, count)
)中:
template<class Archive, class Container, class InputFunction, class R>
inline void load_collection(Archive & ar, Container &s)
{
s.clear();
// retrieve number of elements
collection_size_type count;
unsigned int item_version;
ar >> BOOST_SERIALIZATION_NVP(count);
if(3 < ar.get_library_version())
ar >> BOOST_SERIALIZATION_NVP(item_version);
else
item_version = 0;
R rx;
rx(s, count);
std::size_t c = count;
InputFunction ifunc;
while(c-- > 0){
ifunc(ar, s, item_version);
}
}
我已经尝试#pragma GCC system_header
,但这没有效果。使用-isystem
代替-I
也不起作用。
一般问题仍然是:我知道警告信息的内容。但我不知道与gcc warning options的相关性。
答案 0 :(得分:7)
您可以使用-fdiagnostics-show-option
选项找出与给定警告关联的选项:
$ gcc -fdiagnostics-show-option -Wall foo.c
foo.c: In function ‘main’:
foo.c:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
我的两分钱:假设没有办法实际修复警告,希望你可以设法禁用警告以进行少量编译,这样如果你在自己的代码中犯了类似的错误,你就是'我会被警告。
修改:这似乎是-Wconversion
。 (通过在源代码中找到 - 您可以只查看一些警告文本,并找到对warning( OPT_W_conversion, ...
的调用。)
答案 1 :(得分:5)
如何更改代码以删除警告?听起来你可能应该将一个参数转换为特定类型,而不是让编译器选择要执行的转换。
答案 2 :(得分:4)
两点: 你应该留下警告 - 编译器警告以后会生病 - 崩溃,腐败等等。
曾经是-Wnotanidiot的旗帜。这是在2.9版本的后期...... 3.o的gcc。 我不知道它是否仍然有效,但这个警告符合条件。
答案 3 :(得分:-1)
问题的答案,“我怎样才能找到禁用此警告的选项的名称?”是“阅读编译器的源代码。”