116

我想知道您传递给 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覆盖了我的目标?

4

10 回答 10

272

-Wno-unused-variable开关通常可以解决问题。但是,如果您在项目中关心这些事情,这确实是一个非常有用的警告。当 GCC 开始警告你代码中没有的东西时,它会变得很烦人。

我建议您保持警告,但使用-isystem而不是-I第三方项目的包含目录。该标志告诉 GCC 不要警告您有关您无法控制的内容。

例如,代替-IC:\\boost_1_52_0,说-isystem C:\\boost_1_52_0

希望能帮助到你。祝你好运!

于 2013-02-24T16:31:09.677 回答
97

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

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}

可能存在一种情况,当您需要将此函数用作处理程序时 - 这(恕我直言)在 C++ Boost 库中很常见。然后你需要第二个形参version,所以函数的签名和处理程序需要的模板一样,否则编译会失败。但是您也不需要在函数本身中使用它...

如何标记从警告中排除的变量或形式参数的解决方案是:

void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}

GCC 还有许多其他参数,您可以在手册页中查看它们。这也适用于 C 程序,不仅是 C++,而且我认为它几乎可以用于每个函数,而不仅仅是处理程序。继续尝试!;)

PS:最近我用它来抑制模板中 Boosts 序列化的警告,如下所示:

template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))

编辑:显然,我没有按照您的需要回答您的问题,drak0sha做得更好。这是因为我主要是按照问题的标题,我的不好。希望这可以帮助其他人,因为这个标题而来到这里...... :)

于 2014-04-28T02:22:14.013 回答
78

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

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

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

于 2014-03-28T09:17:26.393 回答
18

请参阅man gcc警告选项下。你有一大堆unused

警告选项
... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable

如果您为其中任何一个添加前缀no-,它将禁用此警告。

许多选项都有以 -f 或 -W 开头的长名称——例如,-fmove-loop-invariants、-Wformat 等等。其中大部分既有正面形式也有负面形式;-ffoo 的否定形式是 -fno-foo。本手册仅记录这两种形式中的一种,以非默认形式为准。

更详细的解释可以在请求或抑制警告的选项中找到

于 2013-02-24T16:30:38.497 回答
13

使用-Wno-unused-variable应该有效。

于 2013-02-24T16:26:32.083 回答
3

编译器已经告诉你,不是valuebut variable。您正在寻找-Wno-unused-variable. 此外,尝试g++ --help=warnings查看可用选项的列表。

于 2013-02-24T16:28:13.753 回答
3

你如何禁用来自 gcc 的未使用的变量警告?
我在 windows 上从 boost 中得到错误,我不想触摸 boost 代码......

您访问Boost 的 Trac并提交一份针对 Boost 的错误报告。

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

于 2015-07-26T19:52:00.120 回答
0

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

CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)

然后 GCC 看到指令-Wall -Wextra并且似乎忽略了-Wno-unused-variable

这可以改为如下所示,并且您可以在未使用的变量上获得编译时不会停止的预期效果:

CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)

有充分的理由将其称为“警告”与“错误”。仅仅因为您的代码不完整(例如您正在将算法存根)而导致编译失败可能会失败。

于 2020-04-13T08:08:03.787 回答
0

您可以在变量前加上'(void)'。如果您无权访问构建框架或者您只想影响本地的行为更改,这可能会很有用。

IE:

int main()
{
  int unused1;       //This will print warning
  int unused2;       //This will not print warning -
                     //                             |
  (void) unused2;    // <----------------------------
}

输出:

$ g++ -Wall test.cc
test.cc: In function ‘int main()’:
test.cc:4:7: warning: unused variable ‘unused1’ [-Wunused-variable]
    4 |   int unused1;
      |       ^~~~~~~
于 2021-12-14T13:32:19.333 回答
-4
export IGNORE_WARNINGS=1

它确实显示警告,但继续构建

于 2013-10-14T09:53:25.143 回答