gpt4 book ai didi

c++ - 海湾合作委员会 4.8.4 "pragma GCC diagnostic not applied"

转载 作者:行者123 更新时间:2023-11-30 05:39:57 25 4
gpt4 key购买 nike

使用 g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

在预编译 header 中,我有以下内容:

63 #pragma GCC diagnostic push
64 #pragma GCC diagnostic ignored "-Wunused-variable"
65 #include <boost/filesystem.hpp>
66 #pragma GCC diagnostic pop

现在,当我运行我们的构建系统时,出现以下构建错误:

from <>../../../../Core_Pch.h:65,
from <command-line>:0:
<>/../../../../external/include/BoostBase/boost/system/error_code.hpp: At global scope:
<>/../../../../external/include/BoostBase/boost/system/error_code.hpp:221:36: error: ‘boost::system::posix_category’ defined but not used [-Werror=unused-variable]
static const error_category & posix_category = generic_category();

似乎已经在 GCC 的 bug tracker 中打开了一个可能的错误.但是,我想知道是否有人有这个工作?该错误回避了一个事实,即 C 词法分析器使用的预处理器行为与 C++ 词法分析器使用的行为不同。


这可能与我们构建系统中的其他内容有关。请注意,如果我创建最简单的示例:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
int main(void)
{
int x;

return 0;
}
#pragma GCC diagnostic pop

如果我调用,这会按预期工作:

~/Devel/pragma $ gcc -Werror -Wall -pedantic main.c 
~/Devel/pragma $ g++ -Werror -Wall -pedantic main.c

注释掉被忽略的行会导致:

mhoggan@mhoggan-Precision-T3600 ~/Devel/pragma $ gcc -Werror -Wall -pedantic main.c 
main.c:2:1: error: C++ style comments are not allowed in ISO C90 [-Werror]
//#pragma GCC diagnostic ignored "-Wunused-variable"
^
main.c:2:1: error: (this will be reported only once per input file) [-Werror]
main.c: In function ‘main’:
main.c:5:7: error: unused variable ‘x’ [-Werror=unused-variable]
int x;
^
cc1: all warnings being treated as errors
mhoggan@mhoggan-Precision-T3600 ~/Devel/pragma $ g++ -Werror -Wall -pedantic main.c
main.c: In function ‘int main()’:
main.c:5:7: error: unused variable ‘x’ [-Werror=unused-variable]
int x;
^
cc1plus: all warnings being treated as errors

最佳答案

我在 g++ 5.3.0 上收到了同样的警告。我通过在定义下添加一个虚拟函数找到了一个讨厌的解决方案,例如:

...
static const error_category & posix_category = generic_category();
static const error_category & errno_ecat = generic_caregory();
static const error_category & native_ecat = system_category();

inline void dummy()
{
(void) posix_category;
(void) errno_ecat;
(void) native_ecat;
}
...

关于c++ - 海湾合作委员会 4.8.4 "pragma GCC diagnostic not applied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com