原創Blog。轉載請註明出處
blog.csdn.net/hello_hwc
歡迎關注個人iOS SDK具體解釋專欄,這裏有很是多基礎的文章。
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.htmlhtml
前言:warnings是編碼中很是重要的一個環節,編譯器給出合理的warning能幫助開發人員找到本身代碼的問題,防止很是多bug產生。
默認用XCode建立一個project,會本身主動開啓一些重要的warnings。但是不少其它的時候,咱們需要編譯器更完整的提醒。ios
iOS開發採用Clang編譯器。objective-c
在search裏搜索Warnings,就可以看到如圖,這是爲所有語言開啓的warnings
ruby
固然。也可以爲不一樣語言開啓warning,也在Build Settings裏
markdown
但是。這樣一個個的開啓關閉定製化很是好。有時候咱們僅僅需要開啓所有或者開啓所有重要的warnings就能夠
這時候,進入
可以加入一些build flag來啓用警告。基本的就是三個app
1.-Wall
Clang以爲本身可以準確報出的警告
2. -Wextra
額外的苛刻的警告。這些警告不必定會形成錯誤。好比假設使用這個flag,把singned 賦值給unsigned就會觸發警告,而大多數時候這樣賦值是沒問題的。ui
3.-Weverything
所有警告this
通常的項目都是開啓-Wall
和-Wextra
兩個警告來保證沒有嚴重錯誤。固然。假設有些明顯的不會出錯。可以用關閉某個或者某些警告。編碼
-Wall -Wno-unused-variable //啓用Wall但是剔除unused-variable
強制開啓一個警告atom
#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
- 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/