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

有没有办法用pragma禁用所有警告?

  •  34
  • Ferruccio  · 技术社区  · 17 年前

    我启动了一个新项目,并决定确保它在启用/Wall选项的情况下干净地构建。唯一的问题是并非所有的第三方库(如boost)编译时都没有警告,因此我求助于在共享头中执行此操作:

    #pragma warning(push)
    
    #pragma warning(disable:4820)
    #pragma warning(disable:4619)
    #pragma warning(disable:4668)
    #pragma warning(disable:4625)
    #pragma warning(disable:4626)
    #pragma warning(disable:4571)
    #pragma warning(disable:4347)
    #pragma warning(disable:4640)
    #pragma warning(disable:4365)
    #pragma warning(disable:4710)
    #pragma warning(disable:4820)
    #pragma warning(disable:4350)
    #pragma warning(disable:4686)
    #pragma warning(disable:4711)
    #pragma warning(disable:4548)
    
    #include <boost/array.hpp>
    #include <boost/assert.hpp>
    #include <boost/assign.hpp>
    #include <boost/bind.hpp>
    #include <boost/lexical_cast.hpp>
    #include <boost/filesystem.hpp>
    #include <boost/foreach.hpp>
    #include <boost/format.hpp>
    #include <boost/function.hpp>
    #include <boost/integer.hpp>
    #include <boost/optional.hpp>
    #include <boost/regex.hpp>
    #include <boost/smart_ptr.hpp>
    #include <boost/algorithm/string.hpp>
    #include <boost/tuple/tuple.hpp>
    #include <boost/utility.hpp>
    #include <boost/variant.hpp>
    
    #pragma warning(pop)
    

    3 回复  |  直到 17 年前
        1
  •  56
  •   Assaf Lavie    17 年前

    您可以按下/弹出低级别警告,如下所示:

    #pragma warning(push, 0)        
    
    #include <boost/bind.hpp>
    #include <boost/shared_ptr.hpp>
    // ...
    
    #pragma warning(pop)
    

    但要知道禁用是不可能的 全部的 警告。例如,某些链接器警告无法关闭。

        2
  •  27
  •   EvilTeach    17 年前
    #pragma warning(disable:4820)
    #pragma warning(disable:4619)
    #pragma warning(disable:4668)
    

    #pragma warning (disable : 4820 4619 4668)
    
        3
  •  5
  •   Matt Warren    17 年前

    我以前做的是设置“W3”选项而不是“Wall”,然后在我自己的每个source.cpp文件中

    #pragma warning(push, 4)
    

    #pragma warning(pop)
    

    作为文件的最后一行。

        4
  •  3
  •   PolarBear    6 年前

    使用中描述的技术 Assaf Lavie's answer

    #define DISABLE_ALL_WARNINGS_BEGIN \
        __pragma(warning(push, 0))
    
    #define DISABLE_ALL_WARNINGS_END \
        __pragma(warning(pop))
    

    它们可以按以下方式使用( online demo

    DISABLE_ALL_WARNINGS_BEGIN
    void foo(int a)
    {
        // this function should generate the following warning
        // "warning C4100: 'a': unreferenced formal parameter"
        // unless it is wrapped inside "DISABLE_ALL_WARNINGS" section
    }
    DISABLE_ALL_WARNINGS_END