我想知道你传递给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
也许-Wall
会覆盖我的目标?
答案 0 :(得分:213)
-Wno-unused-variable
开关通常可以解决问题。但是,如果您关心项目中的这些内容,那么这确实是一个非常有用的警告。当GCC开始警告你不在代码中的事情时,它会变得很烦人。
我建议你保持警告,但是使用-isystem
而不是-I
来包含第三方项目的目录。那个标志告诉GCC不要警告你那些你无法控制的东西。
例如,代替-IC:\\boost_1_52_0
,说-isystem C:\\boost_1_52_0
。
希望它有所帮助。祝你好运!
答案 1 :(得分:69)
有时你只需要压制一些警告而你想要保留其他警告,只是为了安全起见。在您的代码中,您可以使用GCC的未使用的属性来抑制变量甚至形式参数的警告。假设你有这段代码:
void func(unsigned number, const int version)
{
unsigned tmp;
std::cout << number << std::endl;
}
当你需要使用这个函数作为处理程序时,可能会出现这种情况 - (imho)在C ++ Boost库中很常见。然后你需要第二个形式参数 version ,因此函数的签名与处理程序所需的模板相同,否则编译将失败。但是你不能在函数本身中真正需要它......
如何标记要从警告中排除的变量或形式参数的解决方案是:
void func(unsigned number, const int version __attribute__((unused)))
{
unsigned tmp __attribute__((unused));
std::cout << number << std::endl;
}
GCC还有许多其他参数,您可以在手册页中查看它们。这也适用于C程序,不仅适用于C ++,我认为它几乎可用于所有功能,而不仅仅是处理程序。继续尝试! ;)
P.S。:最近我用它来抑制Boosts&#39;模板中的序列化如下:
template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
编辑:显然,我没有按你的要求回答你的问题,drak0sha做得更好。这是因为我主要关注问题的标题,我的不好。希望这可能有助于其他人因为这个头衔而来到这里...... :)
答案 2 :(得分:62)
如果您正在使用gcc并想要禁用所选代码的警告,则可以使用#pragma编译器指令:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop
对于您控制的代码,您也可以使用__attribute__((unused))
来指示编译器不使用特定变量。
答案 3 :(得分:15)
请参阅警告选项下的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。本手册仅记录这两种形式中的一种,无论哪种形式都不是默认形式。
答案 4 :(得分:9)
使用-Wno-unused-variable
应该有效。
答案 5 :(得分:3)
编译器已经告诉你了,它不是value
而是variable
。您正在寻找-Wno-unused-variable
。另外,请尝试g++ --help=warnings
查看可用选项列表。
答案 6 :(得分:3)
如何禁用gcc中未使用的变量警告?
我在Windows上加速出错,我不想触摸升级代码......
您访问Boost's Trac并提交针对Boost的错误报告。
您的申请不负责清除库警告和错误。图书馆负责清除自己的警告和错误。
答案 7 :(得分: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)
有一个很好的理由将其称为“警告”与“错误”。仅仅因为您的代码不完整(例如,您正在对算法进行存根检验)而使编译失败可能会失败。
答案 8 :(得分:-3)
export IGNORE_WARNINGS=1
它会显示警告,但会继续构建