Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 暂时禁用特定版本GCC上的警告_C++_Gcc_Gcc Warning - Fatal编程技术网

C++ 暂时禁用特定版本GCC上的警告

C++ 暂时禁用特定版本GCC上的警告,c++,gcc,gcc-warning,C++,Gcc,Gcc Warning,我有以下情况: 我需要用两个不同版本的GCC(3.2和4.4)编译代码,并希望看到所有警告并将其视为错误(否则将是一个滑坡)。我必须包括我无法更改的头文件,其中包含一些代码。此代码使较新的GCC抛出警告(如未使用的参数) 如果我加上 #pragma GCC diagnostic ignored "-Wunused-parameter" #include <bad_header.hpp> #pragma GCC diagnostic error "-Wunused-parameter"

我有以下情况:

我需要用两个不同版本的GCC(3.2和4.4)编译代码,并希望看到所有警告并将其视为错误(否则将是一个滑坡)。我必须包括我无法更改的头文件,其中包含一些代码。此代码使较新的GCC抛出警告(如未使用的参数)

如果我加上

#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <bad_header.hpp>
#pragma GCC diagnostic error "-Wunused-parameter"
#if (defined __GNUC__) && (__GNUC__ > 3)
    #pragma GCC diagnostic ignored "-Wunused-parameter"
#endif

    #include <bad_header.hpp>

#if (defined __GNUC__) && (__GNUC__ > 3)
    #pragma GCC diagnostic error "-Wunused-parameter"
#endif
#pragma GCC诊断被忽略“-Wunused参数”
#包括
#pragma GCC诊断错误“-Wunused参数”
它用较新的GCC解决了这个问题,但较旧的GCC不熟悉这个pragma并发出警告(这将成为一个错误)

我能做什么

  • 停止将警告视为错误
  • 用某种版本检查宏围绕我的pragma
  • 我不喜欢这两种解决方案,还有什么我可以做的吗

    根据Sander De Dycker的回答进行更新


    我的生成系统不允许我在gcc中使用-isSystem标志,因为您只想抑制来自不受控制的头的警告,您可以使用而不是
    -I
    ,将这些头标记为系统头,gcc将不再为它们生成警告().

    由于您只想抑制来自不受控制的头的警告,您可以使用而不是
    -I
    将这些头标记为系统头,gcc将不再为它们生成警告()。

    我现在要使用的解决方案(直到我看到更好的解决方案)是用宏包装GCC诊断杂注以检查GCC版本,类似

    #pragma GCC diagnostic ignored "-Wunused-parameter"
    #include <bad_header.hpp>
    #pragma GCC diagnostic error "-Wunused-parameter"
    
    #if (defined __GNUC__) && (__GNUC__ > 3)
        #pragma GCC diagnostic ignored "-Wunused-parameter"
    #endif
    
        #include <bad_header.hpp>
    
    #if (defined __GNUC__) && (__GNUC__ > 3)
        #pragma GCC diagnostic error "-Wunused-parameter"
    #endif
    
    #如果(定义的uu GNUC_uuu)和&(u GNUC_uuu>3)
    #pragma GCC诊断已忽略“-Wunused参数”
    #恩迪夫
    #包括
    #如果(已定义)和((已定义)3
    #pragma GCC诊断错误“-Wunused参数”
    #恩迪夫
    
    我现在要使用的解决方案(直到我看到更好的解决方案)是用宏包装GCC诊断杂注,以检查GCC版本,如

    #pragma GCC diagnostic ignored "-Wunused-parameter"
    #include <bad_header.hpp>
    #pragma GCC diagnostic error "-Wunused-parameter"
    
    #if (defined __GNUC__) && (__GNUC__ > 3)
        #pragma GCC diagnostic ignored "-Wunused-parameter"
    #endif
    
        #include <bad_header.hpp>
    
    #if (defined __GNUC__) && (__GNUC__ > 3)
        #pragma GCC diagnostic error "-Wunused-parameter"
    #endif
    
    #如果(定义的uu GNUC_uuu)和&(u GNUC_uuu>3)
    #pragma GCC诊断已忽略“-Wunused参数”
    #恩迪夫
    #包括
    #如果(已定义)和((已定义)3
    #pragma GCC诊断错误“-Wunused参数”
    #恩迪夫
    

    您还可以将未使用的参数强制转换为
    (void)
    以使警告静音。。。。或者不要在参数列表中命名它们。@FrédéricHamidi:那很好,除非你处理的是“头文件我无法更改”。(就我个人而言,我只是想取消这个限制,但我们可能应该认为有一个真正的理由不改变它们)。@Mike,没错,一开始我没有注意到这个细节:)@MikeSeymour-取消这个限制将包括修改头文件,这些头文件可能已经使用了十多年,说服负责人更改是必需的,并且考虑到代码中没有单元测试——提供一个测试计划来证明我的更改是正确的。此外,我必须说服我的老板,仅仅为了消除一个警告,这是值得的。简而言之——“头文件我无法更改”。您还可以将未使用的参数强制转换为
    (void)
    ,以使警告静音。。。。或者不要在参数列表中命名它们。@FrédéricHamidi:那很好,除非你处理的是“头文件我无法更改”。(就我个人而言,我只是想取消这个限制,但我们可能应该认为有一个真正的理由不改变它们)。@Mike,没错,一开始我没有注意到这个细节:)@MikeSeymour-取消这个限制将包括修改头文件,这些头文件可能已经使用了十多年,说服负责人更改是必需的,并且考虑到代码中没有单元测试——提供一个测试计划来证明我的更改是正确的。此外,我必须说服我的老板,仅仅为了消除一个警告,这是值得的。简而言之——“头文件我不能更改”。谢谢,我必须检查一下在我们的构建系统中是否有可能做到这一点。很遗憾,我们的构建系统不允许我进行此更改。我将更新我的问题。谢谢您的回答。@Vadim:您能将
    #pragma GCC system_头文件
    放在顶部,对这些头文件进行最小的修改吗?这不是功能上的改变,因此不需要严格的重新测试。这在理论上是可能的,但所需的工作量(技术和管理)太大了。它是由不同的编译器为不同的操作系统编译的,至少我必须确保pragma不会对它们造成任何伤害。此外,这个pragma将抑制此标题中的所有警告,我确定这不是我应该做的。谢谢,我必须检查在我们的构建系统中是否可能做到这一点。很遗憾,我们的构建系统不允许我进行此更改。我将更新我的问题。谢谢您的回答。@Vadim:您能将
    #pragma GCC system_头文件
    放在顶部,对这些头文件进行最小的修改吗?这不是功能上的改变,因此不需要严格的重新测试。这在理论上是可能的,但所需的工作量(技术和管理)太大了。它是由不同的编译器为不同的操作系统编译的,至少我必须确保pragma不会对它们造成任何伤害。此外,这个pragma将抑制此标题中的所有警告,我确定这不是我应该做的。