对于一个coding有洁癖的人来说,warning在他们眼中和error没什么区别,就像是一口痰卡在喉咙中,吐不出来,咽不下去,甚是难受。
我虽然不是一个“处女座”特性的人,但是在项目上线之前,还是要尽量保证 0 bug,0 error和 0 warning。
waring是编译器认为,你做了一些可能不是你预想那样的事情,但是你还没有意识到。编译器的职责就是严格执行你所告诉它的命令。
很多时候,有些warning是无法避免的,我在开发中遇到的最多的warning就是 unused-variable, deprecated method 这类的warning。xcode提供了多种控制warning的方法,对于不同的warning类型,也有对应的打开和关闭Flag,基本格式如下:
-WsomeWarnig //打开某个warning
-Wno -someWarnig //关闭某个warnig
例:
-Wunused-variable //打开未用变量的warning
-Wno-wariable //关闭未用变量的warning
xcode4之前编译器用的是llvm-gcc,之后的版本用的是llvm-clang,虽然编译器有些不同,但是clang还是兼容了gcc的很多命令,关于warning的Flag可以查看下面三个链接,两个来自于官方,但建议看非官方的那个^^:
gcc:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
clang:http://clang.llvm.org/docs/UsersManual.html
f**k waring:http://fuckingclangwarnings.com
全局设置-Weverthing 可以打开所有的warning,但是一般不建议这么干,因为run一下,你懂的。
设置方式如下图:
设置完之后,就慢慢改吧。
局部warning控制,最常见的就是 unused-variable 有时候,你写了变量,暂时没有用到,但是你过段时间可能要用,又不想在每次编译的时候,一直提示warning,这个时候只需要将该变量声明出加上一个局部的 #pramga 声明即可:
#pragma clang diagnostic push
#pragma clang diagnostic ignore "unused-variable"
......
......
#pragma clang diagnostic pop
done,添加后,编译器在编译的时候,就会忽略push和pop之间的警告。 #pragma还可以用mark来使代码更加整洁。
ps: 关于#pragma的更多介绍可以参看本人正在翻译的NSHipster出版的《obscure-topics-in-cocoa-objective-c》这本书。
参考:
http://onevcat.com/2013/05/talk-about-warning/
http://www.bignerdranch.com/blog/a-bit-on-warnings/
如果有任何问题欢迎再下面留言,或者扫描二维码