如何禁用gcc中未使用的变量警告?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (702)

我想知道你传递给gcc编译器的什么开关来关闭未使用的变量警告?我在Windows上获取错误的提示,并且我不想触摸提升代码:

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
提问于
用户回答回答于

-Wno-unused-variable开关通常是卓有成效的。但是,如果你关心项目中的这些内容,那么这确实是一个非常有用的警告。

我建议你保持警告,但使用-isystem而不是-I第三方项目的包含目录。

用户回答回答于

代码片段:

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

当你需要使用这个函数作为处理程序时,可能会出现这种情况 - 在C ++ Boost库中哪个(imho)是非常常见的。那么你需要第二个正式的参数版本,所以函数的签名与处理程序所需的模板相同,否则编译将失败。

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

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

最近我用这个来压制Boosts序列化的警告,像这样:

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

扫码关注云+社区

领取腾讯云代金券