GCC 从 -Werror 中排除用户定义的警告

问题描述 投票:0回答:1

我想在编译期间将

-Werror
参数传递给 gcc。 问题是我正在编译的代码具有编译指示语句,例如:

#pragma GCC warning "Custom warning message"

我应该能够在命令行中添加像

-Wno-error=pragmas
这样的参数,以保留这些行作为警告。 但是,当我将
gcc --help=warnings
的输出 grep 为
pragma
user
explicit
时,我找不到需要使用的警告开关的名称。 有谁知道如何在启用
#pragma
时排除显式
-Werror
警告的错误?

我还尝试将

#pragma
修改为以下内容,GCC 文档似乎表明也应该完成此操作:

#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wall"
#pragma GCC warning "Custom warning message"
#pragma GCC diagnostic pop

我的GCC版本是11.4.0。

gcc warnings
1个回答
0
投票

可以从 GCC 文档中推断出您尝试过的事情的原因 不起作用,但我认为您不需要进一步说服,只是想要一个解决方案。

更换:

#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wall"
#pragma GCC warning "Custom warning message"
#pragma GCC diagnostic pop

与:

#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wcpp" 
#warning "Custom warning message"
#pragma GCC diagnostic pop

例如:

$ cat main.c
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wcpp" 
#warning "Custom warning message"
#pragma GCC diagnostic pop 

int main(void)
{
    int x; // unused
    return 0;
}

编译如下:

$ gcc -c -Wunused -Werror main.c
main.c:3:2: warning: #warning "Custom warning message" [-Wcpp]
    3 | #warning "Custom warning message"
      |  ^~~~~~~
main.c: In function ‘main’:
main.c:8:13: error: unused variable ‘x’ [-Werror=unused-variable]
    8 |         int x; // unused
      |             ^
cc1: all warnings being treated as errors

在存在

-Werror
的情况下,您的自定义警告仍然是警告。那是因为 此类自定义警告由
-Wcpp
启用,它本身默认启用; 它们被 -Werror
 升级为错误,但可以再次降级为警告,
在此期间,通过:

#pragma GCC diagnostic warning "-Wcpp"

error: unused variable ‘x’
显示
-Werror
在以下时间后恢复生效:

#pragma GCC diagnostic pop

-Wunused
警告升级为错误。

© www.soinside.com 2019 - 2024. All rights reserved.