原创Blog。转载请注明出处
blog.csdn.net/hello_hwc
欢迎关注我的iOS SDK具体解释专栏,这里有非常多基础的文章。
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:warnings是编码中非常重要的一个环节,编译器给出合理的warning能帮助开发人员找到自己代码的问题,防止非常多bug产生。
默认用XCode创建一个project,会自己主动开启一些重要的warnings。可是很多其它的时候,我们须要编译器更完整的提醒。
iOS开发採用Clang编译器。
默认的Warning能够在Build Settings里找到
在search里搜索Warnings,就能够看到如图,这是为全部语言开启的warnings
当然。也能够为不同语言开启warning,也在Build Settings里
可是。这样一个个的开启关闭定制化非常好。有时候我们仅仅须要开启全部或者开启全部重要的warnings就可以
这时候,进入
能够加入一些build flag来启用警告。基本的就是三个
1.-Wall
Clang觉得自己能够准确报出的警告
2. -Wextra
额外的苛刻的警告。这些警告不一定会造成错误。比如假设使用这个flag,把singned 赋值给unsigned就会触发警告,而大多数时候这样赋值是没问题的。
3.-Weverything
全部警告
一般的项目都是开启-Wall
和-Wextra
两个警告来保证没有严重错误。当然。假设有些明显的不会出错。能够用关闭某个或者某些警告。
-Wall -Wno-unused-variable //启用Wall可是剔除unused-variable
用语句强制开启或者关闭某个警告
强制开启一个警告
#warning "This method can not be used"
强制开启一个错误
#error "You must add this key,or you will fail"
强制关闭一个警告
比如
这里会出现警告test这个selector没有实现
[self performSelector:@selector(test) withObject:nil];
强制关闭这个警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
[self performSelector:@selector(test) withObject:nil];
#pragma clang diagnostic pop
经常使用的CLang Warning
- Wall
- Wbad-function-cast
- Wcast-align
- Wconversion
- Wdeclaration-after-statement
- Wdeprecated-implementations
- Wextra
- Wfloat-equal
- Wformat=2
- Wformat-nonliteral
- Wfour-char-constants
- Wimplicit-atomic-properties
- Wmissing-braces
- Wmissing-declarations
- Wmissing-field-initializers
- Wmissing-format-attribute
- Wmissing-noreturn
- Wmissing-prototypes
- Wnested-externs
- Wnewline-eof
- Wold-style-definition
- Woverlength-strings
- Wparentheses
- Wpointer-arith
- Wredundant-decls
- Wreturn-type
- Wsequence-point
- Wshadow
- Wshorten-64-to-32
- Wsign-compare
- Wsign-conversion
- Wstrict-prototypes
- Wstrict-selector-match
- Wswitch
- Wswitch-default
- Wswitch-enum
- Wundeclared-selector
- Wuninitialized
- Wunknown-pragmas
- Wunreachable-code
- Wunused-function
- Wunused-label
- Wunused-parameter
- Wunused-value
- Wunused-variable
- Wwrite-strings
困难模式
所谓的困难模式就是开启全部警告。而且把警告当作error。这意味着,仅仅要另一个警告存在,那么程序将不能编译执行。
參考链接
http://onevcat.com/2013/05/talk-about-warning/
http://programmers.stackexchange.com/questions/122608/clang-warning-flags-for-objective-c-development
http://amattn.com/p/better_apps_clang_weverything_or_wall_is_a_lie.html
http://nshipster.cn/clang-diagnostics/