2011-02-09 38 views
11

在使用LLVM的Xcode 4之前,這讓編譯器不被注意。條件內的分配完全是故意的,是一種可可的習慣用法。if(self = [super init]) - LLVM警告!你怎麼處理它?

選擇LLVM編譯器的Xcode 4永遠不會抱怨,而不僅僅是在編譯時,只要您鍵入它就會出現黃色警告圖標。將警告關閉爲錯誤,只是忽略警告似乎不是一個好主意。將作業移出圓括號會浪費空間。不得不用每個新項目的編譯指示關閉此警告將變得乏味。

你是怎麼處理的?什麼是新的成語?

+1

格式化代碼時,「浪費空間」並不一定是浪費。反映程序結構的縮進線「浪費空間」,但你不會這樣做嗎? – JeremyP 2011-02-09 10:14:09

+0

浪費空間相對於賦予/評估自己的成語只。我非常關心代碼的外觀密度,當它使事情變得更加清晰時,根本不介意多餘的代碼。 – 2011-02-09 20:19:45

+1

愛雙重否定JeremyP。 – 2011-03-26 17:37:16

回答

18

這其實是一個很老的警告,這只是默認關閉與海灣合作委員會,並與Cla 1.6。 Xcode實際上應該給你一個關於如何解決它的建議 - 即括號加倍。

if ((self = [super init])) { ... } 

額外的一對parens告訴編譯器你確實打算在條件中做一個賦值。

4

只需使用2雙括號,使之清楚,你的目的向編譯器:

if ((self = [super init])) 
10

如果您從較新的Xcode的文本宏的init方法,你會注意到,新的祝福方式做初始化是:

- (id)init { 
    self = [super init]; 
    if (self) { 
     <#initializations#> 
    } 
    return self; 
} 

這就避免了警告。如果我遇到這個問題,儘管親自使用我自己的代碼,但我只是簡單地應用了Kevin展示的方法。

好東西知道!

3

調出項目導航器並選擇您的項目。在出現的主窗口中,選擇「全部」。在「LLVM編譯器2.0 - 警告」一節下,選擇「其他警告標誌」。爲「Debug」和「Release」添加標誌「Wno-idiomatic-brackheses」。現在清理並重新編譯。 enter image description here

0

正如其他一些人建議您應該添加一組額外的括號。

我根本不是一個正則表達式大師可以隨意清理它,但這個發現,並在Xcode取代固定我的情況下,約95%:

Replace: if\s*\({1}\s*self\s*={1}(.*)\){1} 
With: if ((self =\1)) 

要小心,因爲這也將發現,如果(self == ...),所以使用預覽和取消選中那些或修復我的正則表達式:)

並開始使用self = ...;如果(自我),它更乾淨。

相關問題