2011-03-27 62 views
81

我明白爲什麼發生未使用的變量警告。我不想一般地壓制他們,因爲他們在大多數情況下非常有用。但是,請考慮以下(人爲)代碼。如何擺脫Xcode中的「未使用變量」警告?

NSError *error = nil; 
BOOL saved = [moc save:&error]; 
NSAssert1(saved, @"Dude!!1! %@!!!", error); 

Xcode報告saved是一個未使用的變量,當然它不是。我懷疑這是因爲NSAssert1是一個宏。 NS_BLOCK_ASSERTIONS宏定義爲而不是,所以Objective C斷言肯定是啓用的。

儘管它沒有傷害任何東西,但我發現它不整潔,令人討厭,我想壓制它,但我不知道該怎麼做。將變量賦值給自己可以擺脫編譯器的警告,但如果存在這樣的事情,我寧願採用「正確」的方式。

回答

96

我不確定它是否在新的LLVM編譯器仍然支持,但GCC有「未使用」的屬性,你可以用它來抑制警告:

BOOL saved __attribute__((unused)) = [moc save:&error]; 

或者(如果LLVM不支持上面的),可以將變量聲明分成一個單獨的行,保證該變量將被「使用」的宏是否膨脹或不:

BOOL saved = NO; 
saved = [moc save:&error]; 
32

在Xcode中可以設置爲「未使用的變量的警告。 「轉到「生成設置」爲目標和過濾用字「未使用」

下面是截圖:Builld Settings Screenshot

我建議你只改變它調試。這樣你就不會錯過發佈版本中的任何東西。

+34

您是否錯過了Gregory所說的「我不想壓制他們,因爲他們在大多數情況下都非常有用」這部分問題? – 2011-03-27 20:21:43

+7

@ShermPendley無論如何,這仍然是有用的,它回答了我如何在全球範圍內關閉它的問題。 – raffian 2012-09-23 22:35:44

+9

關閉警告是錯過錯誤的好方法。我強烈建議反對。 – 2013-05-02 06:06:25

92

使用的Xcode 4.3.2,並發現這似乎工作(少寫)

BOOL saved __unused; 
+0

這不適用於我,我得到一個警告,'保存'被標記爲未使用,但已被使用' – 2016-07-08 14:32:52

21
NSError *error = nil; 
BOOL saved = [moc save:&error]; 
NSAssert1(saved, @"Dude!!1! %@!!!", error); 
#pragma unused(saved) 

嘗試這樣的。 它正在爲我工​​作。它也適用於你。

+0

這不適用於我,我得到一個警告,'保存'被標記爲未使用,但是使用' – 2016-07-08 14:31:17

13

將變量標記爲唯一簡單易用的方法是...使用它。

BOOL saved = ...; 
(void)saved; // now used 

不過,您可能會對已經描述的編譯器特定擴展感到滿意。

+2

我更喜歡上述醜陋的#pragma。 – northernman 2014-09-03 05:00:25

7

嘗試:__unused屬性。在Xcode的5部作品

4

您可以設置 「否」 LLVM compliler 2.0警告上 「釋放」 enter image description here

1

讓它佔用兩行。分開的聲明和默認值

BOOL enabled = NO; 

// ... 

BOOL enabled; 

enabled = NO; 
2

這是你在C,因此也Objective-C的方式。

即使您沒有啓用警告,最好將返回值標記爲明確忽略。它也會向其他開發人員展示,您不僅忘記了返回值 - 您確實已明確選擇忽略它。

(void)[moc save:&error]; 

編輯:編譯器忽略強制類型void,所以應該不會影響性能 - 它只是一個乾淨的人的註釋。

+0

在某些情況下,你必須使用這個hack來獲得Objective-C代碼來編譯。使用'(void)'是最清楚的方法,謝謝! – 2017-09-21 09:26:22

3
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wunused-variable" 
    NSUInteger abc; /// Your unused variable 
#pragma clang diagnostic pop 

SOURCE

+0

這是最乾淨的方法,因爲它只禁用這些#pragmas之間的警告 – cornr 2017-12-19 13:11:49

-1

如果要取消所有在Xcode中這是可以做到的警告如下 去靶>構建設置 - >雨燕編譯器 - 警告策略 - >抑制警告 - > YES