有沒有一種方法可以在分配變量而不是檢查相等時發出警告?有很多次我意外地分配了,而不是進行比較,如果有警告會很棒!if語句中的賦值警告?
有沒有一種方法可以Xcode的警告我,而無需改變編碼樣式:
if (YES == aVariable) {...}
有沒有一種方法可以在分配變量而不是檢查相等時發出警告?有很多次我意外地分配了,而不是進行比較,如果有警告會很棒!if語句中的賦值警告?
有沒有一種方法可以Xcode的警告我,而無需改變編碼樣式:
if (YES == aVariable) {...}
在大多數情況下,如果在if
語句中使用=
而不是==
,則Xcode已經發出警告。如果您沒有收到警告,請告訴我們您正在使用的Xcode版本,您的項目有多大年紀,以及您的默認設置已更改爲哪些版本。
我的測試:我在Xcode 4.5.2中創建了一個全新的iOS應用程序,並沒有更改任何構建設置。我只是給application:didFinishLaunchingWithOptions:
添加了一些代碼來觸發警告。那就是:
您可以通過設置編譯器的-Wno-parentheses
標誌禁用警告(但爲什麼要?)。您可以通過添加額外的括號的分配各地抑制在特定情況下的警告:
if ((x = 7)) {
有兩種情況下,你沒有得到默認的警告。首先,在init
方法,您可以分配到self
,像這樣:
- (id)init {
if (self = [super init]) { // no warning by default
...
其次,在任何情況下,您可以指定nextObject
選擇的結果,是這樣的:
while (object = [enumerator nextObject]) { // no warning by default
你可以通過設置編譯器的-Widiomatic-parentheses
標誌在這些情況下啓用警告。
爲什麼downvote? –
我問自己同樣的問題.....看起來對我來說好吧... +1 –
@robmayoff使用Xcode版本4.5(4G182),我很困惑,因爲我之前從未遇到過這些錯誤,但最近它並沒有捕捉到它們。我曾嘗試在「其他鏈接器標誌」以及「警告鏈接器標誌」中添加'-Widiomatic-brackhees'無效。 – nmock
的編譯器標誌Wparentheses
應該做的伎倆。它會迫使你在有條件的地方放置括號,以便編譯。鏗鏘有默認設置此標誌。
'-Widiomatic-parentheses'標誌僅影響'init'方法中'self'賦值的警告,並且使用'nextObject'選擇器的返回值賦值。請參閱[SemaExpr.cpp]中的Sema :: DiagnoseAssignmentAsCondition功能(http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?revision=166496&view=markup)。 –
你是對的,正確的標誌是Wparentheses,我會更新我的答案以反映這一點。謝謝 – yfrancis
直到我看到你的答案,我才知道習慣括號,所以謝謝你教我新的東西。 :) –
不是默認已經這麼做嗎? –
雅我默認它也 –
@菲菲,謝謝!會做,沒有意識到這一點。 – nmock