一. 内容
-
许多程序员习惯性的忽略编辑器警告
。它们认为:毕竟,如果问题很严重,编译器应该给一个错误信息而非警告信息,不是吗? -
我们看一个例子:
int a=1; if (a=1) { std::cout<<"Ohhh"<<"\n"; }
我想这是很多入门程序员都会犯的错误,将
赋值的结果意外的作为条件判断
,也许或者几乎作者是想写一个 == 而非 =,但编译器认为这并非什么语法错误,高级的编译器也许会给你一个Using the result of an assignment as a condition without parentheses
警告。但是如果你不在乎,你的程序就会因为这些不是错误的警告而运行出错,然后是
许多调试行为,只为找出这个其实编译器早就侦测出来的问题
。 -
一旦你了解了编译器的警告信息,知道不同的警告信息意味着什么,那么尽管我们认为一个没有警告的程序是最理想的,你也可以选择性的忽略某些警告信息。
不管怎么说,
面对警告信息时,你一定要清楚的了解它的真实含义
,然后才可以选择性的处理或者忽略。 -
但是记住,警告信息天生和编译器相关,
不同的编译器有不同的警告标准
。所以,草率依赖编译器为你指出错误,并不可取。一些老旧的编译器面对同样的问题可能半句抱怨都没有。
二. 总结
- 严肃对待编译器发出的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取无任何警告的荣誉。
- 不要过度倚赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原来倚赖的警告信息有可能消失。