objective c - 我如何擺脫Xcode中的“未使用變量”警告?




objective-c compiler-warnings (7)

使它佔用兩條線。 分開聲明和默認值

BOOL enabled = NO;

// ...

BOOL enabled;

enabled = NO;

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

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

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

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


使用Xcode 4.3.2並發現這似乎起作用(少寫)

BOOL saved __unused;

在Xcode中,您可以設置“未使用的變量”的警告。 轉到目標的“構建設置”,並使用“未使用”一詞進行過濾

這是一個截圖:

我建議你只對Debug進行更改。 這樣你就不會錯過發布版本中的任何東西。


將變量標記為已使用的唯一簡單便攜的方法是...使用它。

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

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


我不確定在新的LLVM編譯器中是否仍然支持它,但是GCC有一個“未使用”屬性可以用來抑制該警告:

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

或者(在LLVM不支持上述情況下),您可以將變量聲明分成單獨的一行,保證該變量是否被“使用”,無論宏是否擴展:

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

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

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

(void)[moc save:&error];

編輯:編譯器忽略強制轉換為void ,所以它不應該影響性能 - 它只是一個很好的干淨的人類註釋。


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

像這樣嘗試。 它為我工作。 它也適用於你。





unused-variables