2013-02-24 68 views
71

我想知道你传递给gcc编译器以关闭未使用的变量警告的开关?我得到的错误出在Windows升压的,我不想碰升压代码:如何禁用gcc中未使用的变量警告?

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

由于错误消息或多或少说,尝试'-Werror = no-unused-variable' – 2013-02-24 16:28:05

回答

182

-Wno-unused-variable开关通常是卓有成效的被发现。但是,如果您关心项目中的这些内容,那么这确实是一个非常有用的警告。当GCC开始提醒你关于不在你的代码中的东西时,它变得很烦人。

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

例如,而不是-IC:\\boost_1_52_0,比如-isystem C:\\boost_1_52_0

希望它有帮助。祝你好运!

+40

+1为-isystem,非常有用 – 2013-02-24 18:13:29

+0

在哪里添加此设置?是否在“项目设置/ AVR GNU C编译器/其他”下,但它会被忽略(路径是正确的,仍然会出现警告)当添加到目录设置(取消选中相对路径复选框)AtmelStudio将崩溃。 – hfrmobile 2014-02-26 08:18:31

+1

哇,我很高兴发现关于系统。太棒了。 – Spacemoose 2015-10-07 11:27:14

9

使用-Wno-unused-variable应该工作。

+0

啊,未使用变量,而不是未使用的值! – WilliamKF 2013-02-24 16:28:04

+2

或者'-Wno-error = unused-variable',如果你想删除错误并保持警告。 – 2013-02-24 16:28:23

+1

你实际上可以看到实际的警告是'[ - 错误=未使用变量]'。 – 2013-02-24 16:28:58

3

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

11

请参阅警告选项下的man gcc。有你有unused

警告选项一大堆
... -Wunused -Wunused功能-Wunused标签-Wunused参数-Wunused价值-Wunused变量-Wunused-但-SET-参数-Wunused-but-set-variable

如果以no-为前缀,它将禁用此警告。

许多选项的长名都以-f或-W开头,例如-fmove-loop-invariants,-Wformat等等。这些大多数都有正面和负面的形式; -foo的否定形式是-fno-foo。本手册仅记录这两种形式中的一种,无论哪种形式不是默认形式。

更详细的解释可以在Options to Request or Suppress Warnings

+0

不知道我可以在任何警告前添加“no-”。 – RNA 2016-01-12 06:52:28

-3

删除-Wall它应该工作。删除-Wall的问题是它也会抑制合法的警告。在这种情况下,您必须手动选择-W选项,或在涵盖所有警告后更改为-Wno-unused-variable

LOCAL_CFLAGS = -Wno-unused-variable -g 
+2

此信息在以前的答案中已经存在。 – GManNickG 2013-05-28 22:26:10

-3
export IGNORE_WARNINGS=1 

它会显示警告信息,但与构建继续

51

如果你正在使用gcc和要禁用所选代码的警告,可以使用#pragma编译器指令:

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

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

+1

这是几个GCC bug:[错误C++/53431:C++预处理器忽略#pragma GCC诊断](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431); [错误C++/66943:GCC警告OpenMP的Unknown Pragma,即使它支持它](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943)和朋友。 – jww 2015-07-26 20:10:11

+0

在C源代码中它不起作用。 – peterh 2015-09-06 13:09:41

+0

一般来说,我会说使用#pragma指令不是很安全,除非你真的知道你在做什么,或者你正在使用例如并行化的OpenMP ...;) – 2016-02-17 00:12:25

55

有时你只需要压制一些警告,并且想要保留其他警告,以保证安全。在您的代码中,您可以使用GCC的未使用的属性来抑制变量警告,甚至形式参数警告。比方说,你有这样的代码片段:

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

可能有一种情况,当你需要使用此功能的处理器 - 这(恕我直言)在C相当普遍++ Boost库。然后您需要第二个正式参数版本,因此该函数的签名与处理程序所需的模板相同,否则编译将失败。但你并不真的需要它的功能本身要么...

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

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

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

PS:最近我用这个来抑制提升系列化的警告模板是这样的:

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

编辑:显然,我没有回答你的问题,你需要,drak0sha做的更好。这是因为我主要关注问题的标题,我的不好。希望这可以帮助其他人,谁得到这里,因为该标题... :)

+0

不过,这正是我所期待的。 Thx :) – 2015-01-28 16:16:41

+6

对于形式参数,可以省略名称,例如'void func(无符号数,const int)'。然后,gcc也不会抱怨未使用的'version'。 – 2016-10-08 10:29:07

1

如何禁用未使用的变量警告从gcc出来?
遇到错误出在Windows升压的,我不想碰升压代码...

您访问Boost's Trac和文件对加速的bug报告。

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