Wil*_*mKF 83 c++ gcc compiler-flags compiler-warnings
我想知道你传递给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]
Run Code Online (Sandbox Code Playgroud)
我尝试使用两者-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
Run Code Online (Sandbox Code Playgroud)
也许这-Wall超越了我的目标?
小智 218
该-Wno-unused-variable开关通常是卓有成效的.但是,如果您关心项目中的这些内容,那么这确实是一个非常有用的警告.当GCC开始警告你关于你的代码中没有的东西时,它会变得很烦人.
我建议您保持警告,但使用-isystem而不是-I包含第三方项目的包含目录.那个标志告诉GCC不要警告你那些你无法控制的东西.
例如,而不是-IC:\\boost_1_52_0说-isystem C:\\boost_1_52_0.
希望能帮助到你.祝好运!
Dee*_*Kej 75
有时你只需要压制一些警告而你想要保留其他警告,只是为了安全起见.在您的代码中,您可以使用GCC的未使用属性来抑制变量甚至形式参数的警告.让我们说你有这段代码:
void func(unsigned number, const int version)
{
unsigned tmp;
std::cout << number << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当你需要使用这个函数作为处理程序时,可能会出现这种情况 - 哪些(imho)在C++ Boost库中很常见.然后你需要第二个形式参数版本,因此函数的签名与处理程序所需的模板相同,否则编译将失败.但是你在功能本身中并不需要它......
如何标记要从警告中排除的变量或形式参数的解决方案是:
void func(unsigned number, const int version __attribute__((unused)))
{
unsigned tmp __attribute__((unused));
std::cout << number << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
GCC还有许多其他参数,您可以在手册页中查看它们.这也适用于C程序,不仅适用于C++,我认为它几乎可用于所有功能,而不仅仅是处理程序.继续尝试!;)
PS:最近我使用它来抑制模块中Boosts序列化的警告,如下所示:
template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
Run Code Online (Sandbox Code Playgroud)
编辑:显然,我没有按你的需要回答你的问题,drak0sha做得更好.这是因为我主要关注问题的标题,我的不好.希望这可能有助于其他人,因为这个头衔而来到这里...... :)
Ole*_*olf 65
如果您正在使用gcc并且想要禁用所选代码的警告,则可以使用#pragma编译器指令:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
对于您控制的代码,您还可以使用__attribute__((unused))指示编译器不使用特定变量.
Ola*_*che 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.本手册仅记录这两种形式中的一种,无论哪种形式都不是默认形式.
可在" 请求或抑制警告选项"中找到更详细的说明
小智 8
您可以在变量前加上“(void)”前缀。\n如果您无权访问构建框架或者只想影响行为的本地更改,这会很有用。
\nIE:
\nint main()\n{\n int unused1; //This will print warning\n int unused2; //This will not print warning -\n // |\n (void) unused2; // <----------------------------\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n$ g++ -Wall test.cc\ntest.cc: In function \xe2\x80\x98int main()\xe2\x80\x99:\ntest.cc:4:7: warning: unused variable \xe2\x80\x98unused1\xe2\x80\x99 [-Wunused-variable]\n 4 | int unused1;\n | ^~~~~~~\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
150167 次 |
| 最近记录: |