忽略定义了但是未使用的变量
1 GCC编译中警告不等于错误,但有些警告所有编译器都认为是错误
下面提及几点,
- 明明定义了返回值,但是不返回
- 形参、实参类型不匹配,无法进行隐式转换
编译器最初会给出警告,至于是不是错误,我认为有两点主要原因
- 编译器厂商共同约定的,某些警告就是错误
- 程序员可以附加其他错误项,比如你就认为某个警告就是错误啦
至于我们需不需要将所有的警告全部消灭,看个人和项目要求,但是我们总会遵守下面的两点
- 显示所有的警告
- 遇到第一个错误,就停止编译
下面是我的编译命令,以C++为例吧,
"-g", // gdb调试用的,不需要可以不加
"file.cpp",
"-o",
"file",
"-std=c++11", // C++都加上
"-Wall", // 显示所有警告
"-Wextra", // 显示额外警告
"-Wfatal-errors" // 遇到第一个错误就停止,减少查找错误时间
2 一个案例
下面是一个很常见的案例,这是其实有两个警告
int main(int argc, char* argv[])
{
}
警告如下,注意,编译要像上面那样子给,才能看到警告
/home/topeet/myBoost/test.cpp:78:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
int main(int argc, char* argv[])
^~~~
/home/topeet/myBoost/test.cpp:78:31: warning: unused parameter ‘argv’ [-Wunused-parameter]
int main(int argc, char* argv[])
^
3 忽略定义了但是未使用的变量
int main(int argc, char* argv[])
{
(void)argc;
(void)argv;
}
这样警告就消失了,这个语法有点特殊(void)var
。
注意,C++代码可以没有return 0;编译器会自动加上的。
最后,C++中boost库有专门有一个组件就是解决这个问题的,叫做ignore_unused