web-dev-qa-db-ja.com

Xcodeで「未使用の変数」警告を取り除くにはどうすればよいですか?

未使用の変数警告が発生する理由を正確に理解しています。それらはほとんどの場合非常に有用であるため、一般的にそれらを抑制したくありません。ただし、次の(工夫された)コードを検討してください。

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

Xcodeはsavedが未使用の変数であることを報告しますが、もちろんそうではありません。これはNSAssert1はマクロです。 NS_BLOCK_ASSERTIONSマクロはnotで定義されているため、Objective Cアサーションは確実に有効になります。

それは何も害はありませんが、私はそれを乱雑で迷惑だと感じ、それを抑制したいのですが、どうすればいいのかわかりません。変数をそれ自体に割り当てると、コンパイラの警告がなくなりますが、そのようなものが存在する場合は、「正しい」方法でそれを行います。

91
Gregory Higley

新しいLLVMコンパイラでまだサポートされているかどうかはわかりませんが、GCCにはその警告を抑制するために使用できる「未使用」属性があります。

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

あるいは(LLVMが上記をサポートしていない場合)、変数宣言を別の行に分割して、マクロが展開されるかどうかに関係なく変数が「使用」されることを保証できます。

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

Xcode 4.3.2を使用して、これが機能しているように見えることがわかった(書き込みが少ない)

BOOL saved __unused;
99
JOM

Xcodeでは、「未使用の変数」に対する警告を設定できます。ターゲットの「ビルド設定」に移動し、「未使用」という単語でフィルタリングします

これがスクリーンショットです: Builld Settings Screenshot

デバッグ用にのみ変更することをお勧めします。そうすれば、リリースバージョンで何かを見逃すことはありません。

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

このようにしてみてください。それは私のために働いています。それもあなたのために働きます。

21
Danny Xu

変数を使用済みとしてマークする唯一の簡単で移植可能な方法は…それを使用することです。

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

ただし、既に説明したコンパイラ固有の拡張機能に満足するかもしれません。

14
user3125367

試してください:__unused属性。 Xcode 5で動作します

8
João Nunes
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wunused-variable"
    NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop

[〜#〜] source [〜#〜]

8
Alex

「リリース」で「いいえ」を設定できますLLVM compliler 2.0 warning enter image description here

4
Ar No

これはCで行う方法であり、Objective-Cでも同様です。

警告を有効にしていない場合でも、戻り値を明示的に無視するようにマークすることをお勧めします。また、戻り値を忘れただけでなく、実際に明示的に無視することを選択したことを他の開発者に示します。

(void)[moc save:&error];

編集:コンパイラはvoidへのキャストを無視するため、パフォーマンスに影響を与えることはありません。これは単なるすっきりした人間の注釈です。

3
Trenskow

2行かかるようにします。宣言とデフォルト値を分離する

BOOL enabled = NO;

// ...

BOOL enabled;

enabled = NO;
1
0xFADE