gcc中的-W值对应哪些实际警告?

时间:2010-06-08 13:26:14

标签: c++ gcc

序言:我知道,禁用警告不是一个好主意。无论如何,我对此有一个技术问题。


使用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的相关性。

4 个答案:

答案 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)

问题的答案,“我怎样才能找到禁用此警告的选项的名称?”是“阅读编译器的源代码。”