How do you disable the unused variable warnings coming out of gcc in 3rd party code I do not wish to edit?

I'd like to know what switch you pass to the gcc compiler to turn off unused variable warnings? I'm getting errors out of boost on windows and I do not want to touch the boost code:

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]

I tried using both -Wunused-value and -Wno-unused-value but neither suppressed the messages above.

What is the right command, here is my compile line:

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

Perhaps the -Wall overrides my goal?

235104 次浏览

使用 -Wno-unused-variable应该可以。

编译器已经告诉你,它不是 value而是 variable。你要找的是 -Wno-unused-variable。此外,尝试 g++ --help=warnings查看可用选项列表。

See man gcc under Warning Options. There you have a whole bunch of unused

Warning Options
...-未使用-未使用-函数-未使用-标签-未使用-参数-未使用-值-未使用-变量-未使用-但设置-参数-未使用-但设置-变量

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

许多选项都有以-f 或-W 开头的长名称——-例如,-fmove-loop-不变量、-Wformat 等等。其中大多数都有正反两种形式; 负面形式-foo 将是-fno-foo。本手册只记录这两种表格中的一种,无论哪一种不是默认表格。

更详细的解释可以在 请求或取消警告的选项找到

-Wno-unused-variable开关通常起作用。但是,如果您在项目中关心这些事情,那么这确实是一个非常有用的警告。但是,当 GCC 开始警告您代码中没有提到的内容时,它就变得很烦人。

我建议您保留这个警告,但是对于包含第三方项目的目录,请使用 -isystem而不是 -I。这个标志告诉海湾合作委员会不要警告你那些你无法控制的东西。

例如,将 -IC:\\boost_1_52_0改为 -isystem C:\\boost_1_52_0

希望能帮上忙,祝你好运!

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

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

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

有时,为了安全起见,只需要禁止显示某些警告,并保留其他警告。在代码中,可以使用 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 + + ,而且我认为它可以用于几乎所有的函数,而不仅仅是处理程序。试试吧!;)

附注: 最近我用这个来抑制 Boosts 序列化的警告,模板是这样的:

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

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

如何禁用来自 gcc 的未使用的变量警告?
我得到了错误的加载窗口,我不想触摸加载代码..。

您访问 Boost’s Trac并针对 Boost 提交错误报告。

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

-Wall-Wextra在 GCC 中设定阶段,随后的 -Wno-unused-variable可能无效。例如:

CFLAGS + =-std = c99-迂腐-迂腐-错误-错误-g0-Os - 严格-溢出-严格-混淆 -Wall -Wextra \ - Pthread -Wno-unused-label \ - 没有-未使用-功能 没有未使用的参数 - 没有-未使用-变量 $(INC)

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

相反,它可以看起来像下面这样,并且您可以得到所期望的效果,即不会在编译过程中停止未使用的变量:

CFLAGS + =-std = c99-迂腐-迂腐-错误-错误-g0-Os - 严格-溢出-严格-混淆 - Pthread - 没有-未使用的-标签 - 没有-未使用-功能 $(INC)

它被称为“警告”而不是“错误”是有充分理由的。仅仅因为代码不完整而导致编译失败(比如说您正在使算法失效)可能会导致失败。

可以在变量前面加上“(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;
|       ^~~~~~~

我建议不要编辑第三方代码,也不要在全球范围内压制警告。如果使用 CMake,则只能禁止显示针对外部库的特定警告。

find_package(Boost REQUIRED)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(Boost::boost PUBLIC -Wno-unused-variable)
endif()
...
add_executable(main "main.cpp")
target_link_libraries(main Boost::boost)

See also FindBoost.cmake.