Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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_Compiler Warnings_Compiler Flags - Fatal编程技术网

C++ 如何在我不想编辑的第三方代码中禁用来自gcc的未使用变量警告?

C++ 如何在我不想编辑的第三方代码中禁用来自gcc的未使用变量警告?,c++,gcc,compiler-warnings,compiler-flags,C++,Gcc,Compiler Warnings,Compiler Flags,我想知道您传递给gcc编译器什么开关来关闭未使用的变量警告?windows上的boost出现错误,我不想触碰boost代码: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unus

我想知道您传递给gcc编译器什么开关来关闭未使用的变量警告?windows上的boost出现错误,我不想触碰boost代码:

C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
我尝试同时使用
-Wunused value
-Wno unused value
,但都没有抑制上面的消息

正确的命令是什么,下面是我的编译行:

g++  -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp

也许
-Wall
覆盖了我的目标?

使用
-Wno未使用的变量
应该不起作用。

编译器已经告诉你,它不是
,而是
变量
。您正在查找
-Wno未使用的变量
。另外,请尝试
g++--help=warnings
查看可用选项的列表。

请参见“警告选项”下的内容。这里有一大堆未使用的

警告选项
... -Wunused-Wunused函数-Wunused标签-Wunused参数-Wunused值-Wunused变量-Wunused但设置参数-Wunused但设置变量

如果您在它们中的任何一个前面加上
no-
,它将禁用此警告

许多选项都有以-f或-W开头的长名称,例如,-fmove循环不变量,-Wformat等等。其中大多数既有积极的形式,也有消极的形式;-ffoo的否定形式是-fno-foo。本手册仅记录这两种形式中的一种,以非默认形式为准


更详细的解释可以在中找到
-Wno unused variable
开关通常起作用。然而,如果您在项目中关心这些事情,这确实是一个非常有用的警告。但当GCC开始警告您代码中没有的东西时,它会变得很烦人

我建议您保持警告处于打开状态,但对于第三方项目的include目录,请使用
-isystem
而不是
-I
。该标志告诉GCC不要警告您无法控制的内容

例如,不要使用
-IC:\\boost\u 1\u 52\u 0
,而是使用
-isystem C:\\boost\u 1\u 52\u 0

希望能有帮助。祝你好运

export IGNORE_WARNINGS=1

它确实会显示警告,但会继续生成

如果您正在使用gcc并希望禁用所选代码的警告,则可以使用#pragma编译器指令:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop

对于您控制的代码,您还可以使用
\uuuuu属性(未使用))
来指示编译器不使用特定变量。

有时,为了安全起见,您只需要抑制一些警告,并保留其他警告。在代码中,可以使用GCC的unused属性来抑制变量甚至形式参数的警告。假设您有以下代码段:

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}
void func(无符号数,常量int版本)
{
未签名tmp;
标准::cout
如何禁用gcc中未使用的变量警告?
我从windows上的boost中获取错误,我不想接触boost代码

您访问Boost并提交一份bug报告


您的应用程序不负责清除库警告和错误。库负责清除自己的警告和错误。

-Wall
-Wextra
在GCC中设置阶段,随后的
-Wno unused variable
可能不会生效。例如,如果您有:

CFLAGS+=-std=c99-学究式-学究式错误-Werror-g0-Os\
-fno严格溢出-fno严格别名\
-沃尔-韦斯特拉酒店\
-pthread\
-Wno未使用标签\
-Wno未使用函数\
-Wno未使用参数\
-Wno未使用变量\
$(公司)

然后GCC看到指令
-Wall-Wextra
,似乎忽略了
-Wno未使用的变量

这可以改为如下所示,您可以在编译未使用的变量时获得所需的效果:

CFLAGS+=-std=c99-学究式-学究式错误-Werror-g0-Os\
-fno严格溢出-fno严格别名\
-pthread\
-Wno未使用标签\
-Wno未使用函数\
$(公司)


有一个很好的理由将其称为“警告”而不是“错误”。编译失败仅仅是因为您的代码不完整(比如您正在删除算法)可能会失败。

Ahh,未使用的变量,而不是未使用的值!或
-Wno error=unused variable
,如果要删除错误并保留警告,则可以查看实际警告是什么
[-Werror=unused variable]
。正如错误消息或多或少所说,请尝试
-Werror=no unused variable
添加此设置的位置是否可能重复?是否在“项目设置/AVR GNU C编译器/Miscellaneous”下执行了此操作,但将其添加到目录设置时将被忽略(路径正确,仍会收到警告)(取消选中相对路径复选框)AtmelStudio将崩溃。我们还有
-Wno unused parameter
用于未使用的函数参数,
-Wno unused function
用于未使用的函数您需要:
-Wno unused but set variable-Wno unused parameter-Wno unused variable
,它以一些GCC错误为模:;和朋友。通常,我会说使用#pragma指令是不是很安全,除非你真的知道自己在做什么,或者你正在使用OpenMP进行并行化…)@Dee'Kej
#pragma
指令是完全安全的,如果你将它们包装到
#ifdef some_compiler…#endif
。警告是编译器特有的功能,没有标准的定义。你不能抑制任何警告不带
#pragma
s的代码中的ngs。弗拉迪斯拉夫·托查洛夫关于警告是编译器特有的说法是对的。但我们这里不是一般性地谈论编译器警告——我们是专门谈论GCC。你关于#pragma不有害的说法也是正确的。然而,在我看来,许多人不知道如何正确使用#pragma这就是为什么我认为它是“危险的”(F)
void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}
template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))