在使用LLVM的Xcode 4之前,這讓編譯器不被注意。條件內的分配完全是故意的,是一種可可的習慣用法。if(self = [super init]) - LLVM警告!你怎麼處理它?
選擇LLVM編譯器的Xcode 4永遠不會抱怨,而不僅僅是在編譯時,只要您鍵入它就會出現黃色警告圖標。將警告關閉爲錯誤,只是忽略警告似乎不是一個好主意。將作業移出圓括號會浪費空間。不得不用每個新項目的編譯指示關閉此警告將變得乏味。
你是怎麼處理的?什麼是新的成語?
在使用LLVM的Xcode 4之前,這讓編譯器不被注意。條件內的分配完全是故意的,是一種可可的習慣用法。if(self = [super init]) - LLVM警告!你怎麼處理它?
選擇LLVM編譯器的Xcode 4永遠不會抱怨,而不僅僅是在編譯時,只要您鍵入它就會出現黃色警告圖標。將警告關閉爲錯誤,只是忽略警告似乎不是一個好主意。將作業移出圓括號會浪費空間。不得不用每個新項目的編譯指示關閉此警告將變得乏味。
你是怎麼處理的?什麼是新的成語?
這其實是一個很老的警告,這只是默認關閉與海灣合作委員會,並與Cla 1.6。 Xcode實際上應該給你一個關於如何解決它的建議 - 即括號加倍。
if ((self = [super init])) { ... }
額外的一對parens告訴編譯器你確實打算在條件中做一個賦值。
只需使用2雙括號,使之清楚,你的目的向編譯器:
if ((self = [super init]))
如果您從較新的Xcode的文本宏的init方法,你會注意到,新的祝福方式做初始化是:
- (id)init {
self = [super init];
if (self) {
<#initializations#>
}
return self;
}
這就避免了警告。如果我遇到這個問題,儘管親自使用我自己的代碼,但我只是簡單地應用了Kevin展示的方法。
好東西知道!
調出項目導航器並選擇您的項目。在出現的主窗口中,選擇「全部」。在「LLVM編譯器2.0 - 警告」一節下,選擇「其他警告標誌」。爲「Debug」和「Release」添加標誌「Wno-idiomatic-brackheses」。現在清理並重新編譯。
正如其他一些人建議您應該添加一組額外的括號。
我根本不是一個正則表達式大師可以隨意清理它,但這個發現,並在Xcode取代固定我的情況下,約95%:
Replace: if\s*\({1}\s*self\s*={1}(.*)\){1}
With: if ((self =\1))
要小心,因爲這也將發現,如果(self == ...),所以使用預覽和取消選中那些或修復我的正則表達式:)
並開始使用self = ...;如果(自我),它更乾淨。
格式化代碼時,「浪費空間」並不一定是浪費。反映程序結構的縮進線「浪費空間」,但你不會這樣做嗎? – JeremyP 2011-02-09 10:14:09
浪費空間相對於賦予/評估自己的成語只。我非常關心代碼的外觀密度,當它使事情變得更加清晰時,根本不介意多餘的代碼。 – 2011-02-09 20:19:45
愛雙重否定JeremyP。 – 2011-03-26 17:37:16